Как сделать несколько графиков из одних и тех же стандартных входных данных в gnuplot? - PullRequest
12 голосов
/ 13 февраля 2011

Я хочу иметь один файл .plt, в котором хранятся данные и команды gnuplot.Мои данные выглядят как

# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8

и соответствуют двум графикам: (x1, y1) и (x2, y2).

Я знаю, что могу использовать "-" как:

plot "-" using 1:2
# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
e

Но это породило бы только один график, т. Е. (X1, y1).Я пытаюсь сделать что-то вроде

plot "-" using 1:2, "-" using 3:4
# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
e

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

Примечания:

  1. Я не могу изменить стиль данных.Он состоит из четырех столбцов.
  2. Кажется, я могу сделать это с reread, но для этого нужны два файла.Я действительно хочу только один файл.

Ответы [ 4 ]

7 голосов
/ 15 февраля 2011

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

  • Вводить два набора данных в разные команды построения в целом.

  • Измените формат файла таким образом, чтобы между наборами данных были пустые строки, затем укажите их все с помощью index .

  • Измените формат файла таким образом, чтобы чередующиеся строки представляли разные наборы данных, а затем укажите их все с помощью каждые .

  • Поместите данные в один файл, сценарий черчения - в другой, а затем несколько раз ссылайтесь на файл данных с различными , используя каждый раз предложения .

Вступление к командам каждые и index , начиная с Как построить несколько наборов данных в одном файле ?Это единственные средства, встроенные в gnuplot для такого рода вещей, и ни одна из них не выполняет именно то, о чем вы спрашивали.хорошо, что вы уже изменили форматирование данных, потому что это никогда не сработало, как вы изначально надеялись.

4 голосов
/ 13 февраля 2011

Я не уверен, сколько вы можете редактировать файл, но самый аккуратный способ, вероятно, состоит в том, чтобы поместить все это в сценарий оболочки / пакетный сценарий (вы используете Linux или Windows?)

Вкл.Linux я делаю что-то вроде этого

#!/bin/bash

#put my data in a file
echo "
# x1 y1 x2 y2
  1  2  3  4
  5  6  7  8
" > my_dat.dat

#launch gnuplot
gnuplot<<EOF
#gnuplot commands here
set output "test.ps"
set term postscript

plot "my_dat.dat" u 1:2, \
     "my_dat.dat" u 3:4

set term pop
set output

EOF

# cleanup
rm my_dat.dat

Затем я chmod + wrx файл, в который я поместил вышеупомянутые команды и запускаю.

Примечание: похоже, есть сходство с этим вопросом:

gnuplot stdin, как построить две линии?

Так что вы можете посмотреть туда тоже

2 голосов
/ 27 августа 2015

Новая опция начиная с gp5.0 (см. Также help inline data):

$dataset << EOD
1 2 3 4 
5 6 7 8
EOD

plot $dataset using 1:2, $dataset using 3:4
1 голос
/ 27 августа 2015

Я знаю, что это старый пост, но я хотел бы указать на другую стратегию, если кто-то еще борется с этой проблемой:

Вы также можете использовать команду построения и вводить данные дважды, например:

plot "-" using 1:2, "-" using 3:4
# 1  2  3  4
  5  6  7  8
  e
  1  2  3  4
  5  6  7  8
  e

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

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

...