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

Данные участка трубопровода в gnuplot script

Я хочу создать gnuplot с тремя графиками в нем. Данные должны быть встроенными (поскольку я хочу только

Он должен выглядеть так:

https://s22.postimg.cc/qcc94e1i9/test.png

В настоящее время я использую следующий скрипт gnuplot для создания сюжета:

set terminal png
set output "test.png"
plot for[col=2:4] "data.txt" using 1:col title columnheader(col) with lines

Файл data.txt:

Generation Best Worst Average
0 2 1 0
1 3 1 2
2 4 3 3
3 4 3 3
4 6 3 4
5 7 4 5
6 9 6 7
7 10 6 9
8 10 5 6
9 11 6 8
10 12 7 9

Я хотел бы передать data.txt в gnuplot и не полагаться на ссылочный файл данных в скрипте. Что-то вроде cat data.txt | gnuplot plot.gnu cat data.txt | gnuplot plot.gnu. Причина этого заключается в том, что у меня есть несколько файлов data.txt и вы не хотите строить файл plot.gnu для каждого из них.

Я прочитал о специальном файле '-' qaru.site/info/205383/... и я прочитал о нескольких графиках в одном файле. Однако для этого потребуется включить данные с кодом gnuplot, который не является чистым.

4b9b3361

Ответ 1

Если вы используете систему Unix (т.е. не Windows), вы можете использовать '<cat' вместо '-' для чтения из stdin:

plot '<cat' using ...

Тогда вы можете сделать cat data.txt | gnuplot script.gp. Однако в конкретном случае, который вы упомянули в своем вопросе, с графиком в цикле for, вы читаете ввод три раза. Поэтому отправка данных через stdin не подходит, поскольку данные будут удалены после первого считывания.

Ответ 2

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

cat data.txt | cut -f2 -d' ' | gnuplot -p -e "plot '<cat'"

Ответ 3

Что случилось с использованием опции -e gnuplot из оболочки? Вы можете указать переменную в качестве входных данных, например data.txt, из оболочки, используя:

gnuplot -e "filename='data.txt';ofilename='test.png'" plot.gnu

Вы должны иметь возможность вызывать указанную выше команду несколько раз с разными значениями для "filename" из оболочки, используя цикл for.

И затем вы измените свой script plot.gnu на:

set terminal png
set output ofilename
plot for[col=2:4] filename using 1:col title columnheader(col) with lines

Ответ 4

Если вы хотите печатать данные, поступающие из трубы более одного раза, вам нужно как-то их сохранить в памяти. Мой предпочтительный способ - использовать временный файл в /dev/shm, который существует в большинстве систем Linux и карты в ОЗУ. Просто чтобы все было в порядке, я установил ловушку для удаления временного файла при выходе.

Пример (с использованием вашего data.txt):

cat data.txt | (cat > /dev/shm/mytempfile && trap 'rm /dev/shm/mytempfile' EXIT && gnuplot -e "set terminal dumb; plot for[col=2:4] '/dev/shm/mytempfile' using 1:col title columnheader(col) with lines")

Результат:

12 ++------------+-------------+-------------+-------------+------------**
   +             +             +             +             + Best ****** +
   |                                                        Worst***#### |
10 ++                                              *******Average $$$$$$++
   |                                           ****                      |
   |                                        ***    $$$$               $$$$
 8 ++                                     **     $$    $$        $$$$$  ++
   |                                    **     $$        $$    $$        |
   |                               *****    $$$              $$       ####
 6 ++                          ****       $$ ############# $$    #####  ++
   |                         **         $$ ##             #  ####        |
   |                       **        $$$ ##                ##            |
   |                     **      $$$$  ##                                |
 4 ++         ***********   $$$$$  ####                                 ++
   |     *****  ###################                                      |
   | ****   $$##                                                         |
 2 **    $$$##                                                          ++
   #########                                                             |
   + $$          +             +             +             +             +
 0 $$------------+-------------+-------------+-------------+------------++
   0             2             4             6             8             10

Ответ 5

Как насчет использования команды system()

set terminal png
set output "test.png"

# read shell input
# the echo prints the variable, which is then piped to gnuplot
fname = system("read filename; echo $filename")

plot for[col=2:4] fname using 1:col title columnheader(col) with lines 

Теперь вы можете позвонить ему с помощью

echo "data.txt" | gnuplot script.gp

Ответ 6

Смешайте оба ответа:

cat data.txt | gnuplot -e "set terminal png; set output "test.png"; plot for[col=2:4] '<cat' using 1:col title columnheader(col) with lines