Гнуплот реплот не строит - PullRequest
       10

Гнуплот реплот не строит

0 голосов
/ 14 сентября 2018

Короткая версия:

Команда gnuplot "replot", похоже, ничего не печатает.Только исходный график («plot ...») отображается в выходных данных.

Длинная версия:

У меня есть сценарий оболочки, циклически повторяющий базу данных файлов, некоторые из которых нуждаются вчтобы быть нанесенным на том же выходном изображении, некоторые не делают.В настоящее время мой подход заключается в том, чтобы сценарий оболочки написал сценарий gnuplot ... что-то вроде этого: каталог

входных файлов, "data"

1_1.csv
1_2.csv
1_3.csv
1_4.csv
2_1.csv
...
x_y.csv

shell.sh

for f in data/*.csv
do
    gpFile=scripts/gp_x.gp      # x from input filename
    out=out_x.png               # x from input filename
    if [ ! -e "$gpFile" ]; then       # if gnuplot script does not exist
        cat <<-EOF >$gpFile           # create new file called gp_x.gp
        set datafile separator ","
        set term png size 1024,768
        set autoscale fix
        set output $out
        plot "$f" using 1:2 with lines
        EOF
    else                              # file does exist
        cat <<-EOF >>$gpFile          # append file with more text
        replot "$f" using 1:2 with lines
        EOF
    fi
done

for s in scripts/*.gp  # cycle through all scripts just generated
    gnuplot $s         # run gnuplot scripts
done

Таким образом, этот сценарий оболочки генерирует несколько сценариев gnuplot, один из которых будет выглядеть следующим образом:

gp_x.gp

set datafile separator ","
set term png size 1024,768
set autoscale fix
set output out_x.png
plot "x_1.csv" using 1:2 with lines
replot "x_2.csv" using 1:2 with lines
replot "x_3.csv" using 1:2 with lines
replot "x_4.csv" using 1:2 with lines

Это приводит только к построению первогокоманда plot, и ни одна из команд replot не выполнена (также не выдается никаких ошибок).Если бы я должен был заменить его на что-то вроде ...

plot "x_1.csv" using 1:2 with lines, \
     "x_2.csv" using 1:2 with lines, \
     "x_3.csv" using 1:2 with lines, \
     "x_4.csv" using 1:2 with lines

Это прекрасно работает.Однако из-за некоторых сложностей в моей реальной программе (это чрезвычайно упрощено), на самом деле просто невозможно объединить дополнительную строку, подобную этой, без риска разорвать скрипт (например, иметь аргументы без команды).И в любом случае, я хотел бы знать, почему «реплот», кажется, не работает таким образом (или, более вероятно, что я делаю неправильно).Спасибо!

1 Ответ

0 голосов
/ 14 сентября 2018
plot "x_1.csv" using 1:2 with lines, \
     "x_2.csv" using 1:2 with lines, \
     "x_3.csv" using 1:2 with lines, \
     "x_4.csv" using 1:2 with lines

создает один график с четырьмя линиями.

plot "x_1.csv" using 1:2 with lines
replot "x_2.csv" using 1:2 with lines
replot "x_3.csv" using 1:2 with lines
replot "x_4.csv" using 1:2 with lines

создает четыре графика: первый с одной линией, второй с двумя линиями и т. Д. Это эквивалентно

plot "x_1.csv" using 1:2 with lines
plot "x_1.csv" using 1:2 with lines, "x_2.csv" using 1:2 with lines
plot "x_1.csv" using 1:2 with lines, "x_2.csv" using 1:2 with lines,  "x_3.csv" using 1:2 with lines
plot "x_1.csv" using 1:2 with lines, "x_2.csv" using 1:2 with lines,  "x_3.csv" using 1:2 with lines, "x_4.csv" using 1:2 with lines

Если вы используете терминал, который поддерживает несколько страниц (например, pdfcairo), вы получите четыре страницы. png не поддерживает это, и вы видите только первый график.

...