2016-04-05 29 views
0

Ben gnuplot ile bir grafik çizmek istiyorum ve ben bir veri kümesi olacak, soldan sağa formunu çizecek ve bundan sonra, 1.3 veya bir şeyle çarpılarak aynı veriyi çizeceğim Sağdan sola ve bir kez daha orijinal veriyi 0.7 ile çarparak tekrar soldan sağa doğru çizin.Gnuplot - sağdan sola doğru arsa

Bu, ilk arsa için soldan sağa çalışma kodum ancak kalan iki kişinin nasıl çizileceğini bilmiyorum. Değişken VERİ veri dosyasıdır.

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 

Bana bazı ipuçları verebilir misiniz? Çok teşekkürler

cevap

0

Aşağıdaki kod sadece benim önerdiğim yaklaşımın ana hatlarını göstermektedir;

Eksik boşlukları doldurmak için size bırakacağım Çarpma faktörü, çizim yönü (1 = soldan sağa; -1 için uygun parametrelerle 3 kez çağrılacak bir işlev oluşturulmasını öneririm mkplot = sağdan sola) ve dosya ismini girin (sadece daha sonra farklı dosyalar için arsa rutinini tekrar kullanmanız gerekiyorsa). awk, çarpımların yanı sıra normal ve ters emirlerde veri çıkışı yapmak için kullanılıyor. İstenilen gnuplot başlıklarını yazdırmak için awk bölümündeki print ifadelerini değiştirmeniz gerekir.

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