2011-02-13 3 views
2

J'apprends gnuplot en travaillant sur des données de marée, dans les fichiers mensuels, dans ce format:Commencez un terrain un jour précis de la semaine

2011/03/01 Tue 08:42 9.39 H 
2011/03/01 Tue 15:04 0.2  L 
2011/03/01 Tue 21:18 8.67 H 
2011/03/02 Wed 03:16 0.71 L 
2011/03/02 Wed 09:31 9.51 H 
2011/03/02 Wed 15:49 0.09 L 
2011/03/02 Wed 22:01 8.91 H 
2011/03/03 Thu 04:01 0.48 L 
2011/03/03 Thu 10:14 9.58 H 
2011/03/03 Thu 16:28 0.05 L 
2011/03/03 Thu 22:39 9.11 H 

Tout va bien jusqu'à présent: je parcelles empilés sortie en PDF avec la configuration de mise en page multiplot, MAIS je voudrais avoir les parcelles hebdomadaires toujours courir lundi-dimanche.

Avec des semaines fractionnaires, surtout la première semaine, comment puis-je faire cela? Je peux définir le xrange manuellement, mais il faudrait le refaire pour chaque commande hebdomadaire.

Ce que je voudrais savoir deux choses:

  • une façon de gérer le premier problème de la semaine;
  • un moyen d'automatiser la xrange pour chaque semaine suivante (c.-à-ont gnuplot analyser l'horodatage et commencer une nouvelle parcelle chaque lundi Puis-je faire peut-être cela en utilisant l'opérateur ternaire?)

Configuration:
gnuplot: Version 4.4 patchlevel 2
OSX 10.6.6

configuration & terrain commandes:

set timefmt "%Y/%m/%d-%H:%M" 
set origin 0,0 
set xdata time 
unset key 
set samples 1000 
myDate(col1,col3)=sprintf("%s-%s",strcol(1),strcol(3)) 
set grid noxtics 
set xtics nomirror font "Arial,10" tc rgb "blue" 
set xtics offset 0,0 # required for position of tic labels when stacked. 
set yrange [-3:13] 
set ytics 3 
set grid ytics back 
set x2data time 
set x2tics 86400 
set grid x2tics back 
set x2tics 86400 
set format x2 "%d" # displays number of day of month 
set x2tics offset 3.5,-3 font "Helvetica,20" # required for position of numbers when stacked. 
#### set size 1,.2 # un-comment for setting up stacked layout. 
set tmargin 3 # gives adequate room between each row of days + labels. 
set lmargin 5 
set bmargin 2 
set rmargin 2 
plot 'MonthlyTideDataMarch.txt' u (myDate(1,3)):4:xticlabels(strcol(4) . " \n" . strcol(3)) lc rgb "green" lw 3 sm cspl notitle 

Répondre

0

I w Utilisez un script bash pour cela et utilisez le programme "date". Vous avez besoin probable de modifier les formats de date, etc., mais en principe,) cela devrait fonctionner ...

# write dates into a temporary file, create a date range 
# for each line in your input file 
echo -n ""> tmp.out 
while read line; do 
     d=${line:0:22} 
     y=$(date --date "$d" +%Y) 
     w=$(date --date "$d" +%W) 
     M=$(date --date "$y-01-01 +$w weeks -1 week +2 day" +%Y-%m-%d) 
     S=$(date --date "$y-01-01 +$w weeks -1 week +8 day" +%Y-%m-%d) 
     echo '"'$M'":"'$S'"' >> tmp.out 
done < data.txt 

# make them unique 
uniq tmp.out > dates.out 

# create a gnuplot input file, needs your code from above 
cat <<EOF > in.gnu 
reset 
EOF 

# add a plot command for each date range. 
# needs your plot command and perhaps more plot specific data (title, etc.) 
while read line; do 
    cat <<EOF >>in.gnu 
    set xrange [$line] 
    plot "data.txt" u 1:2 
EOF 
done < dates.out 

le script génère un fichier d'entrée gnuplot que vous pouvez exécuter sur vos données.

Questions connexes