#gnuplot
#gnuplot
Вопрос:
Я начал использовать 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)"
далее следует таблица, повторяемая столько раз, сколько у меня есть команд построения графика (каждый раз завершается буквой «e»).
Недавно я начал пытаться очистить свой код и обнаружил, что в GNUPLOT есть команда «plot for», и я попытался использовать это. Например:
plot for [i=3:5] './table1.dat' using i:2 with lines ls i columnhead(i)
работает очень хорошо, за исключением того, что я хотел бы иметь таблицу в том же файле, что и команды GNUPLOT. Не получается заменить «. / table1.dat» на «-«, а затем записать таблицу (включая 3 «e» в конце), потому что тогда я получаю только первую строку. Это работает, если я повторяю таблицу, как и раньше (с «e» между ними), но затем я возвращаюсь к решению, которое у меня уже есть.
Я пытался добавить «repeat» после «e», но безуспешно.
Ранее я пробовал multiplot, но потом у меня возникли проблемы с масштабированием.
Построение графика работает нормально, просто я хотел бы избежать длительного и довольно запутанного повторения (также в моем потоковом коде) одной и той же таблицы для каждой строки, которую я хочу построить. Я уверен, что должен быть какой-то тонкий способ сделать то, что я хочу, но я не могу найти его в руководстве.
Бо Сандман
Ответ №1:
Начиная с версии 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
Комментарии:
1. Это именно то, что я хочу, спасибо. Я обновлю свой GNUPLOT и попрошу всех пользователей OpenCalphad сделать то же самое.
Ответ №2:
Причина, по которой вам нужно повторить данные, заключается в том, что 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, отсюда и хитрость со списком слов.