Предполагая, что у меня есть файл, который выглядит так:
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
Возможно ли, чтобы Gnuplot построил эти два набора данных на одном графике с заголовками, указанными в первой строке каждого набора данных?
Предполагая, что у меня есть файл, который выглядит так:
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2
Возможно ли, чтобы Gnuplot построил эти два набора данных на одном графике с заголовками, указанными в первой строке каждого набора данных?
Это определенно возможно, и ваш файл данных уже является правильным. Функциональность, которую вы ищете, встроена в columnheader(N)
, которая считывает данные в верхней части столбца N'th и использует ее как заголовок сюжета:
plot 'test.dat' i 0 u 1:2 w lines title columnheader(1),\
'test.dat' i 1 u 1:2 w lines title columnheader(1)
который можно сжать с помощью итерации:
plot for [IDX=0:1] 'test.dat' i IDX u 1:2 w lines title columnheader(1)
Решение, основанное на ответах аннаров (answer 1 и answer 2), чтобы автоматизировать все процесс должен использовать:
datafile = 'test.dat'
stats datafile
plot for [IDX=1:STATS_blocks] datafile index (IDX-1) u 1:2 w lines t\
columnheader(1) lc variable
При этом script автоматически определяет количество блоков данных и отображает их с разными цветами и с соответствующим заголовком, определенным в первой строке каждого блока данных.
С небольшой модификацией вашего набора данных (так, чтобы заголовки были указаны как комментарии):
#"p = 0.1"
1 1
3 3
4 1
#"p = 0.2"
1 3
2 2
5 2
Вы можете построить эти два набора данных в виде отдельных строк следующим образом:
plot 'data.dat' i 0 t "p = 0.1", '' i 1 t "p = 0.2"
Параметр index
(i
для краткости) команды plot сообщает gnuplot о построении набора данных i
th. Я не могу найти способ получить gnuplot, чтобы автоматически получать заголовки из заголовка, поэтому я указал их вручную с помощью параметра title
(t
для краткости).
gnuplot 5.1 (2016/08/28)
Это похоже на fooobar.com/questions/247863/..., но с некоторыми исправлениями для более поздних версий.
Script:
datafile = 'test.dat'
stats datafile nooutput
plot for [IDX=0:STATS_blocks-1] \
datafile \
index IDX \
using 1:2 \
with lines \
title columnheader(1)
Данные теста:
a
1, 1
2, 2
3, 3
"b"
1, 1
2, 4
3, 9
"c, c"
1, 1
2, 8
3, 27
Вывод:
Это работает в 2016/08/28, который позже станет 5.1, но не в 5.0.3 (Ubuntu 16.04), потому что в 5.0.3 команда stats
дает ошибку, потому что заголовки столбцов являются недопустимыми данными. И в 2016/08/28 это стало всего лишь предупреждением.
Я спросил, как удалить предупреждение: https://groups.google.com/forum/#!topic/comp.graphics.apps.gnuplot/Pi4aBE2PwZ8
Использование комментариев:
#a
1, 1
2, 2
3, 3
не работал ни в одной из версий, которые я тестировал, она просто игнорируется.
Это Bruce_Warrior и ответы Чиро Сантилли, но без промежуточного stats
:
# plot.gpi
datafile = ARG1
plot for [i=0:*] datafile index i using 1:2\
with lines title columnheader(1)
Цикл for
может напрямую перебирать все наборы данных в файле. Он работает в gnuplot 5.0.5, но я не уверен, когда for
приобрел эту возможность. Он документирован в руководство 5.0, но не руководство 4.6.
Если цвет линии не должен определяться третьим входным столбцом, потребляемым linecolor variable
(на ответ Брюса), gnuplot автоматически назначит разные цвета и стили линий. В этом конкретном случае using 1:2
также можно опустить.
$ gnuplot --version
gnuplot 5.0 patchlevel 5
$ gnuplot --persist -c plot.gpi test.dat
test.dat
"p = 0.1"
1 1
3 3
4 1
"p = 0.2"
1 3
2 2
5 2