2016-04-05 3 views
0

Я хочу построить график с gnuplot, и идея в том, что у меня будет набор данных, который я построю слева направо, и после этого постройте одни и те же данные, умноженные на 1,3 или что-то справа налево и еще раз нарисуйте исходные данные, умноженные на 0.7 снова слева направо.Gnuplot - сюжет справа налево

Это мой рабочий код для первого сюжета слева направо, но я понятия не имею, как сделать так, чтобы он заработал два. Переменная DATA - это файл данных.

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 

Не могли бы вы дать мне несколько советов? Большое спасибо

ответ

0

Код ниже представляет только схему моего предлагаемого подхода; Я оставлю это до вас, чтобы заполнить недостающие пробелы.

Предлагаю создать функцию mkplot, которая будет называться 3 раза с соответствующими параметрами для коэффициента умножения, направление графика (1 = слева направо, -1 = справа налево) и введите имя файла (на всякий случай вам нужно повторно использовать сюжетную программу для разных файлов позже). awk используется для выполнения умножений, а также для вывода данных в нормальном и обратном порядке. Вам нужно будет изменить операторы print в разделе awk для печати нужных gnuplot заголовков.

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 
Смежные вопросы