Подтвердить что ты не робот

Gnuplot: построение нескольких наборов данных с заголовками из одного файла

Предполагая, что у меня есть файл, который выглядит так:

"p = 0.1"
1 1
3 3
4 1


"p = 0.2"
1 3
2 2
5 2

Возможно ли, чтобы Gnuplot построил эти два набора данных на одном графике с заголовками, указанными в первой строке каждого набора данных?

4b9b3361

Ответ 1

Это определенно возможно, и ваш файл данных уже является правильным. Функциональность, которую вы ищете, встроена в 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)

Ответ 2

Решение, основанное на ответах аннаров (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 автоматически определяет количество блоков данных и отображает их с разными цветами и с соответствующим заголовком, определенным в первой строке каждого блока данных.

Ответ 3

С небольшой модификацией вашего набора данных (так, чтобы заголовки были указаны как комментарии):

#"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 для краткости).

Ответ 4

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

Вывод:

I8KeR.png

Это работает в 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

не работал ни в одной из версий, которые я тестировал, она просто игнорируется.

Ответ 5

Это 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

Plot de

test.dat

"p = 0.1"
1 1
3 3
4 1


"p = 0.2"
1 3
2 2
5 2