-не так Часто Задаваемые Вопросы- обновлено 2010/12/26
|
|
not so FAQ |
Построение числовых данных из файла (No.3)Как я могу использовать UNIX команды внутри gnuplot.С gnuplot можно модифицировать данные построения . Например, данные разбиты на 2 файла: данные X в 'a.dat',а данные Y в 'b.dat'. При необходимости можно изменить в файле исходные данные построения, лучшый способ изменить сам файл данных, прежде чем выполнить построение, но иногда UNIX-команды являются более полезными. В данных примерах используются следующие команды: sortКоманда sort позволяет объединить несколько файлов данных.
% 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 pasteКоманда paste ставит более двух файлов рядом.
% 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 Удалить третью строку. gnuplot> plot '<sed "3d" file1.dat' u 1:2 with points awkawk является очень мощным языком, позволяющим манипулировать каждым столбцом файла данных. Общие значения данных Y приведенны с гистограммы. Последнее значение - это сумма данных Y. gnuplot> plot "<awk '{x=x+$2; print $1,x}' file1.dat" with boxes Обращает 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 |