GNUPLOT

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

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

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

1 | 2 | 3 |

Как разместить несколько наборов данных в одном файле?

Для хранения постороений нескольких данных в одном файле используется using и index. Здесь "данные" означает можество пар (X,Y). Gnuplot рисует линию или пишет один и тот же символ в каждой точке данных.

Когда данные имеют одинаковые значения X, представленные в виде таблицы, используется опция using для задания значений Y. Следующий пример содержит три значения Y с одинаковыми значениями X.

#   X         Y1         Y2         Y3
   -1.0000    0.0000     0.0000     1.0000
   -0.9000    0.5700     1.1769     0.7150
   -0.8000    1.0800     1.4400     0.4600
   -0.7000    1.5300     1.4997     0.2350
   -0.6000    1.9200     1.4400     0.0400
   -0.5000    2.2500     1.2990    -0.1250
   -0.4000    2.5200     1.0998    -0.2600
   -0.3000    2.7300     0.8585    -0.3650
   -0.2000    2.8800     0.5879    -0.4400
   -0.1000    2.9700     0.2985    -0.4850
    0.0000    3.0000    -0.0000    -0.5000
    0.1000    2.9700    -0.2985    -0.4850
    0.2000    2.8800    -0.5879    -0.4400
    0.3000    2.7300    -0.8585    -0.3650
    0.4000    2.5200    -1.0998    -0.2600
    0.5000    2.2500    -1.2990    -0.1250
    0.6000    1.9200    -1.4400     0.0400
    0.7000    1.5300    -1.4997     0.2350
    0.8000    1.0800    -1.4400     0.4600
    0.9000    0.5700    -1.1769     0.7150
    1.0000    0.0000    -0.0000     1.0000
gnuplot> plot "test.dat" using 1:2 with lines,\
              "test.dat" using 1:3 with lines,\
              "test.dat" using 1:4 with lines
fig/sample7.2a

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

#  X     Y     Yerror
   1.0   1.2   0.1
   2.0   1.8   0.1
   3.0   1.6   0.1


   1.1   0.8   0.2
   2.1   0.3   0.2
   3.1   1.0   0.2


   1.2   1.5   0.3
   2.2   2.3   0.3
   3.2   3.1   0.3
gnuplot> plot "test.dat" using 1:2 with lines
fig/sample7.2b
gnuplot> plot "test.dat" using 1:2:3 with yerrorbars
fig/sample7.2c

Как вы можете видеть, все данные различных блоков данных взяты с одной линии/одного типа символа. Чтобы сделать их различными, необходимо указать блок данных с помощью index. Первый блок данных имеет индекс 0, второй - 1, и т.д.

gnuplot> plot "test.dat" index 0 using 1:2:3 with yerrorbars,\
              "test.dat" index 1 using 1:2:3 with yerrorbars,\
              "test.dat" index 2 using 1:2:3 with yerrorbars
fig/sample7.2d

Можно указать диапазон индекса. Например, для использования одинаковых символов в первом и втором блоках, причем изменив символ третьего блока:

gnuplot> plot "test.dat" index 0:1 using 1:2:3 with yerrorbars,\
              "test.dat" index 2   using 1:2:3 with yerrorbars
fig/sample7.2e

Я хочу изменять значения данных в моем файле при постороении

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

#  X     Y
   1.0   1.2
   2.0   1.8
   3.0   1.6
gnuplot> plot "test.dat" using 1:2          with points,\
              "test.dat" using 1:($2*2)     with points,\
              "test.dat" using 1:(sqrt($2)) with points,\
              "test.dat" using 1:(log($2))  with points
fig/sample7.3

Указывается n-ый столбец $n и совершаются некоторые операции. Выражение должно быть введено в скобках. Выражение using 1:sqrt($2) не работает. Возможны расчеты, затрагивающие несколько столбцов. Например, using 1:2:($2*$3) дает произведение второго и третьего столбцов.


Этот метод полезен когда есть файл данных, содержащий неопределенности и погрешности(%) в значениях Y. Для того чтобы изобразить погрешности, необходимо чтобы неопределенности данных были абсолютными. Для преобразования неопределенностей в абсолютные используется using 1:2:($2*$3/100.0), где второй столбец - значения Y, а третий - погрешность(%).

Я хочу записать некоторые команды построений в файл данных

Gnuplot использует 2 файла, один для данных, второй для управляющих команд. Если данные не сложны, можно поместить команды построений в файл с самими данными. Это представляет собой обычный файл с командами построения, но данные, которые необходимо построить, не находятся во внешнем файле, а обозначены "-", за которым следует массив данных. Gnuplot останавливает чтение данных когда строка начинается символом "e" (в качестве примера дано слово end).

set xrange [0:5]
set yrange [0:3]
plot "-" using 1:2:3 w yerrorbars
#  X     Y     Z 
   1.0   1.2   0.2
   2.0   1.8   0.3
   3.0   1.6   0.2
   4.0   1.2   0.2
end
pause -1

Подготовка контрольного файла с данными представленными выше, имя задается как параметр командной строки при вызове gnuplot .

 % gnuplot "test.plt"

Использование команды replot в данном методе невозможно. Gnuplot пытается прочитать данные из стандартного ввода снова, потому что gnuplot не запоминает данные.

Я хочу устранить некоторые точки данных

Есть 2 способа пропускать данные в файле: первый заключается в редактировании файла данных, в качестве альтернативы можно использовать опцию every option. Чтобы пропустить некоторые точки данных в файле, необходимо перед числом поставить некоторый символ "?". Этот символ определяется командой set missing , но символы, которые не могут быть преобразованны в числа, могут обрабатываться тоже.

Следующий пример показывает преобразование двух графиков (X,Y1) и (X,Y2).

test1.dat test2.dat
#  X     Y1    Y2
   1.0   1.2   1.5
  ?2.0   1.8   0.8
   3.0   1.6   1.1
#  X     Y1    Y2
   1.0   1.2   1.5
   2.0   1.8  ?0.8
   3.0   1.6   1.1

В левой таблице второе значение X имеет знак "?", поэтому вторая точки данных (2.0,1.8) и (2.0,0.8) пропускаются. В правой таблице, точка (2.0,1.8) остается, но точка (2.0,0.8) пропускается.

gnuplot> plot "test1.dat" using 1:2 with linespoints,\
              "test1.dat" using 1:3 with linespoints
fig/sample7.5a
gnuplot> plot "test2.dat" using 1:2 with linespoints,\
              "test2.dat" using 1:3 with linespoints
fig/sample7.5b

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

#  X     Y1    Y2
   1.0   0.0   0.1
   2.0   0.0   0.1
   3.0   0.0   0.1
   4.0   0.1   0.2
   5.0   0.6   0.4
   6.0   1.0   0.9
   7.0   1.2   1.7
   8.0   1.3   2.4

Значения Y1 в диапазоне X[1:3] равны нулю, поэтому взятие логарифма невозможно. Gnuplot проводит вертикальные линии в нижней точке, которая имеет положительное значение (здесь это X=4).

fig/sample7.5c

Чтобы удалить вертикальную линию, необходимо поставить символ "?" перед Y1=0.0, таким образом "?0.0". Тогда значения Y1 (красная линия) не рассматриваются и данные начинаются на X=4. То же можно сделать с помощью опции команды every ::3. См. следующую тему.

fig/sample7.5d

Как записать в файл часть построенных данных?

Для того чтоб указать диапазон данных, которые будут построены, используется опция every Чтобы пропускать каждые 2 линии, записывается plot "test.dat" every 2 .

Если файл данных содержит несколько блоков, разделенных одной пустой строкой, то можно пропустить блок данных с помощью опции every Чтобы пропустить один раз 2 блока, пишется plot "test.dat" every :2.

every I:J:K:L:M:N
I Увеличение номера строки
J Увеличение номера блока данных
K Первая линия данных
L Первая линия блока данных
M Последняя линия данных
N Последняя линия блока данных
every 2 plot каждые 2 линии
every ::3 plot строит график с третьей линии
every ::3::5 plot с 3 по 5 линии
every ::0::0 plot строит только первую линию
every 2::::6 plot строит 1,3,5,7 линии
every :2 plot строит каждые 2 блока данных
every :::5::8 plot строит с 5 по 8 блок данных

В качестве альтернативы (если используется UNIX-подобная система), часть файла данных может быть построенна с помощью команды, "head" и "tail".

gnuplot> plot "< head -10 test.dat" using 1:2 with lines
gnuplot> plot "< tail -3 test.dat" using 1:2 with lines
gnuplot> plot "< head -5 test.dat" using 1:2 with lines,\
>        plot "< tail -5 test.dat" using 1:2 with points

Первая команда "plot" построить первые 10 строк "test.dat", вторая команда "plot" показывает последние 3 строки файла данных. Сдедующие строки являются примером построения графика из файла данных "test.dat" --- первые 5 точек изображены линиями, а последние пять точек - символами.

from an Iwata-kun's question. Thanks !
up