GNUPLOT

-не так Часто Задаваемые Вопросы-

обновлено 2010/12/26

Построение числовых данных из файла (No.3)

1 | 2 | 3 |

Как я могу использовать UNIX команды внутри gnuplot.

С gnuplot можно модифицировать данные построения . Например, данные разбиты на 2 файла: данные X в 'a.dat',а данные Y в 'b.dat'. При необходимости можно изменить в файле исходные данные построения, лучшый способ изменить сам файл данных, прежде чем выполнить построение, но иногда UNIX-команды являются более полезными.

В данных примерах используются следующие команды:

sort

Команда sort позволяет объединить несколько файлов данных.

file1.dat file2.dat
   1.0   0.1
   2.0   0.2
   5.0   0.5
   8.0   0.8
   5.0   1.0
  10.0   1.2
  12.0   1.3
 % sort -n file1.dat file2.dat
   1.0   0.1
   2.0   0.2
   4.0   0.6
   5.0   0.5
   5.0   1.0
   8.0   0.8
  10.0   1.2
  12.0   1.3

Все точки данных 2 массивов будут выведены символами и объединены одной линией.

gnuplot> plot "< sort -n file1.dat file2.dat" using 1:2  w l,\
>             "file1.dat" u 1:2 w p,\
>             "file2.dat" u 1:2 w p
fig/sample7.7a

paste

Команда paste ставит более двух файлов рядом.

file1.dat file2.dat
   1.0   0.1
   2.0   0.2
   3.0   0.5
   4.0   0.8
   1.0   0.6
   2.0   1.0
   3.0   1.2
   4.0   1.3
 % paste file1.dat file2.dat
   1.0   0.1       1.0   0.6
   2.0   0.2       2.0   1.0
   3.0   0.5       3.0   1.2
   4.0   0.8       4.0   1.3

Чтобы нарисовать фигуру пар (X,Y), где данные X - это 'file1.dat',а данные Y - 'file2.dat':

gnuplot> plot "< paste file1.dat file2.dat" using 2:4  w lp

Так же есть возможность сравнить 2 файла с помощью данной команды. Команда paste записывает данные Y 'file1.dat' во вторую колонку, а 'file2.dat' в четвертой колонке, поэтому разница между двумя наборами данных выражается через $2-$4, а коэффициенты $2/$4 .

gnuplot> plot "< paste file1.dat file2.dat" using 1:($2/$4) w points
from Ken. Thanks !

sed

Потоковый редактор sed очень мощный инструмент для редактирования текстовых данных. Рассмотрим несколько полезных примеров. Приведенный выше файл 'file1.dat' используется в качестве примера.

Сдвинем значение X массива с 1.0 на 1.2.

gnuplot> plot '<sed "s/^   1.0/   1.2/g" file1.dat'

Показывает все точки, но соединяет линией только не проходящие через (2.0,0.2).

gnuplot> plot 'file1.dat'                   u 1:2 with points,\
>             '<sed "/^   2.0/d" file1.dat' u 1:2 with lines
fig/sample7.7b

Удалить третью строку.

gnuplot> plot '<sed "3d" file1.dat' u 1:2 with points

awk

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

Общие значения данных Y приведенны с гистограммы. Последнее значение - это сумма данных Y.

gnuplot> plot "<awk '{x=x+$2; print $1,x}' file1.dat" with boxes
fig/sample7.7c

Обращает Y в нуль, когда значения Y меньше 0.2.

gnuplot> plot  "<awk '{print $1,($2<0.1) ? 0.0 : $2}' file1.dat" with lines

Умножает значения Y на 5, когда X находится в диапазоне [1:3].

gnuplot> plot  "<awk '{print $1,($1<=3 && $1>=1) ? $2*5 : $2}' file1.dat" with lines
up