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

Как сделать несколько графиков из тех же стандартных входных данных в gnuplot?

Я хочу иметь один файл .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 ожидает новый набор данных со стандартного ввода для второго "-".

Примечания:

  • Я не могу изменить стиль данных. Он состоит из четырех столбцов.
  • Кажется, что я могу сделать это с помощью reread, но для этого требуются два файла. Мне действительно нужен только один файл.
4b9b3361

Ответ 1

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

  • Подайте два набора данных в разные сюжетные команды вообще.

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

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

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

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

Ответ 2

Я не уверен, сколько вы можете отредактировать файл, но самый простой способ - это, возможно, положить все это в оболочку script/batch script (вы используете 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, как построить две строки?

Итак, вы можете посмотреть там тоже

Ответ 3

Новая опция с 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

Ответ 4

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

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

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

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