Выбор одной строки из файла данных в gnuplot - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть файл данных со 100 столбцами и тысячами строк, но я хочу иметь возможность выбрать одну отдельную строку, и в этой строке использовать четные столбцы в качестве входных данных для оси X и нечетных столбцов в качествевходы для оси Y для графика.Есть ли способ сделать это в gnuplot?

1 Ответ

0 голосов
/ 17 сентября 2018

Итак, вот скрипт, который я сделал для построения данной строки из заданного файла данных с нечетным столбцом в качестве оси X и четным столбцом в качестве оси Y.

#!/usr/bin/gnuplot
set term pdf
set output "plot.pdf"

line_number=1
data_file="data.dat"

set xrange[0:10]
set yrange[0:10]

table_file="/tmp/gnuplot_tab.dat"
set table table_file

plot for[i=1:*:2] "<(sed -n '".line_number."p' ".data_file.")" u i:i+1
unset table
unset key
plot table_file

Давайте объясним этот сценарий:

Сначала мы указываем номер строки с помощью line_number и имя файла данных с помощью data_file. Эффект set table table_file - это, как указано в gnuplot документация , печать координат точек в файле ̀table_file instead of ploting them with plot` команда.

Графики plot for[i=1:*:2] для каждого i начинаются с 1, заканчиваются, когда столбец больше не может быть нанесен, и увеличиваются на 2 на каждой итерации. Идея состоит в том, чтобы взять столбцы i ( т.е. нечетные) и i+1 ( т.е. четные) в качестве координат (или использовать обратный i+1:i, чтобы взять четные для x- ось и нечетные для оси у).

Партия "<(sed -n '".line_number."p' ".data_file.")" основана на Gnuplot, строящем данные из файла до некоторой строки и выбирает линию, указанную вами в качестве файла. Поскольку set table было сделано, эта команда plot сохраняет каждую координату в новый файл. Это трюк для преобразования строки в файл с двумя столбцами.

Наконец скрипт отключает disableset table to then plot the saved file table_file`

Я протестировал его с помощью следующего файла данных, изменив номер строки с 1 на 2:

10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 0
0 10 1 9 2 8 3 7 4 6 5 5 6 4 7 3 8 2 9 1 10 0
...