2016-04-05 16 views
0

Ich möchte ein Diagramm mit gnuplot plotten und die Idee ist, dass ich eine Datenmenge haben werde, die ich von links nach rechts plotten werde und danach die gleichen Daten mit 1,3 oder etwas multipliziert von rechts nach links und noch einmal die ursprünglichen Daten multipliziert mit 0,7 wieder von links nach rechts.Gnuplot - Zeichnung von rechts nach links

Dies ist mein Arbeitscode für die erste Handlung von links nach rechts, aber ich habe keine Ahnung, wie man es macht die restlichen zwei. Variable DATA ist die Datendatei.

LINES=$(wc -l <"$DATA") 
YRANGE=$(sort -n "$DATA" | sed -n '1p;$p' | paste -d: -s) 

FMT=$TMPDIR/%0${#LINES}d.png 

for ((i=1;i<=LINES;i++)) 
do 
    { 
     cat <<-PLOT 
      set terminal png 
      set output "$(printf "$FMT" $i)" 
      plot [0:$LINES][$YRANGE] '-' with lines t '' 
      PLOT 
     head -n $i "$DATA" 
    } | gnuplot 
done 

Können Sie bitte einige Hinweise geben Sie mir? Vielen Dank

Antwort

0

Der folgende Code repräsentiert nur den Grundriss meines vorgeschlagenen Ansatzes; Ich überlasse es Ihnen, die fehlenden Leerzeichen zu füllen

Ich schlage vor, eine Funktion mkplot zu erstellen, die 3 mal mit den entsprechenden Parametern für Multiplikationsfaktor aufgerufen wird, Plot Richtung (1 = von links nach rechts; -1 = von rechts nach links), und geben Sie den Dateinamen ein (nur für den Fall, dass Sie später die Plot-Routine für verschiedene Dateien wiederverwenden müssen). awk wird verwendet, um die Multiplikationen sowie die Datenausgabe in normalen und umgekehrten Reihenfolgen auszuführen. Sie müssen die print Anweisungen im Abschnitt awk ändern, um Ihre gewünschten gnuplot Header zu drucken.

DATA=data 

function mkplot { 
    local factor=$1 
    local dir=$2 
    local file=$3 

    awk ' 
     # multiply each data point by factor 
     { a[i++]= ($0 * '$factor') } 
     END{ 
      # after all lines have been processed, output result 
      print "set terminal png" 
      print "add other gnuplot options here" 
      print "..." 
      print "plot \"-\"" 
      # dump lines in reverse order if dir=-1 
      if ('$dir' == -1) {for (j=i-1;j>=0;j--) print a[j] } 
      # or in standard order if dir=1 
      else { for (j=0;j < i;j++) print a[j] } 
     } 
    ' $file | gnuplot # pipe the awk output to gnuplot 
} 

# Call the plot routine for 3 plots with different factors and directions 
mkplot 1 1 $DATA 
mkplot 1.3 -1 $DATA 
mkplot 0.7 1 $DATA