Построение нескольких кривых - PullRequest
2 голосов
/ 10 апреля 2019

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

plot "-" using 3:2 with lines ls  1 title "X(LIQUID,CU)",\
"" using   4:2 with lines ls  2 title "X(FCC-A1,CU)",\
"" using   5:2 with lines ls  3 title "X(FCC-..O#2,CU)" 

, за которым следует таблица, повторяемая столько раз, сколько у меня есть команды заговора (каждый раз завершается буквой «е»). Недавно я начал пытаться очистить свой код и обнаружил, что в GNUPLOT есть команда «plot for», и я попытался использовать это. Например:

plot for [i=3:5] './table1.dat' using i:2 with lines ls i columnhead(i)

работает очень хорошо, за исключением того, что я хотел бы, чтобы таблица находилась в том же файле, что и команды GNUPLOT. Это не работает, чтобы заменить «./table1.dat» на «-», а затем записать таблицу (включая 3 «e» в конце), потому что тогда я получу только первую построенную линию. Это работает, если я повторяю таблицу, как и раньше (с «е» между), но затем я возвращаюсь к решению, которое у меня уже есть. Я пытался добавить «повторить» после «е», но безуспешно. Ранее я пробовал мультиплот, но тогда у меня были проблемы с масштабированием.

Графики работают нормально, просто я хотел бы избежать длинных и довольно запутанных повторений (также в моем коде ow) одной и той же таблицы для каждой строки, которую я хочу построить. Я абсолютно уверен, что должен быть какой-то тонкий способ сделать то, что я хочу, но я не могу найти это в руководстве.

Бо Сундман

Ответы [ 2 ]

2 голосов
/ 10 апреля 2019

Начиная с версии 5.0, gnuplot имеет именованные блоки данных, которые позволяют определять многократно используемые встроенные данные в одном файле:

$Table <<EOD
1 11 111
2 22 222
3 33 333
EOD
plot for [i=2:3] $Table using 1:i with lines
0 голосов
/ 10 апреля 2019

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

Сначала вы можете записать свои данные во временный файл, а затем построить его:

F=system("mktemp /tmp/gnuplot-XXXXXXXX")
TITLES="A B C D"
set table F
plot "-" u 1:2:3:4:5 w table
0 1 2 3 4 
1 6 7 8 9 
e 
plot for [i=2:5] F u 1:i tit word(TITLES,i-1)

Проблема в том, чтоset table не поддерживает экспорт колонок AFAIK, поэтому трюк со списком слов.

...