GNUPLOT

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

update 2010/12/26

Введение в Gnuplot - Числовые данные

Подготовка файла данных

Здесь рассмотрен пример построения графика по числовым данным, полученным с помощью вычислений. Чтобы их применить, результаты расчетов должны быть сохранены в файл данных, т.е. в обычный текстовый файл. Следующие программы вычисляют аппроксимирующую функцию Паде от y=exp(-x)

#include <stdio.h>
#include <math.h>

int main(void);
int main(void)
{
 int i;
 double x,y,z1,z2,d;

 d = 0.1;
 x = 0.0;
 for(i=0;i<50;i++){
   x += d;
   y  = exp(-x);
   z1 = (6 - 2*x)/(6 + 4*x + x*x);
   z2 = (6 - 4*x + x*x)/(6 + 2*x);
   printf("% 6.2f % 11.4e % 11.4e % 11.4e\n",
             x,y,z1,z2);
 }
 return 0;
}
      INTEGER I 
      REAL*8  X,Y,Z1,Z2,D
      D = 0.1
      X = 0.0
      DO 10 I=1,50
          X = X+D;
          Y  = EXP(-X)
          Z1 = (6 - 2*X)/(6 + 4*X + X*X)
          Z2 = (6 - 4*X + X*X)/(6 + 2*X)
          WRITE(6,20) X,Y,Z1,Z2
   10 CONTINUE
   20 FORMAT(F6.2,3(1X,1PE11.4))
      STOP
      END

Эти программы дают результат с плавающей точкой. Первая колонка - координата X, вторая - прямое вычисление exp(-x), третья и четвёртая колонки приближённые вычисления аппроксимирующей функции Паде с погрешностями. Как вы видите, приближение применимо только к очень маленьким значениям X.

  0.10  9.0484E-01  9.0484E-01  9.0484E-01
  0.20  8.1873E-01  8.1871E-01  8.1875E-01
  0.30  7.4082E-01  7.4074E-01  7.4091E-01
  0.40  6.7032E-01  6.7010E-01  6.7059E-01
  0.50  6.0653E-01  6.0606E-01  6.0714E-01
                    ....
  4.60  1.0052E-02 -7.0237E-02  5.7632E-01
  4.70  9.0953E-03 -7.2510E-02  6.0325E-01
  4.80  8.2297E-03 -7.4627E-02  6.3077E-01
  4.90  7.4466E-03 -7.6597E-02  6.5886E-01
  5.00  6.7379E-03 -7.8431E-02  6.8750E-01
up

Построение пары (X,Y)

Файл данных "output.dat" содержит вышеуказанные значения. Каждое значение X имеет 3 различных значения Y. Чтобы нарисовать график по значениям второй колонки, как от функции по первой колонки, используйте using символ при построении.

gnuplot> plot "output.dat" using 1:2 with lines
plotcalc1

Стиль графика определяется с помощью with название стиля. В примере выше lines стиль задан тонкой линией, соединяющей точки. Существует несколько других видов линии, они пронумерованы: 1, 2, 3... Чтобы изменить вид линии, используйте: with lines номер. Если номер не задан, то gnuplot задаст автоматически номер от 1 до максимально возможного.

Вот примеры некоторых стилей построения:

точки plotcalc1a
ступенчатое plotcalc1b
импульсы plotcalc1c
up

Рисуем несколько линий

Чтобы нарисовать несколько линий одновременно, примените следующий способ: plot "A" using 1:2 with line, "B" using 1:2 with points, ... Иногда строка из таких команд может быть очень длинной. Если строка заканчивает символом '\', слудующая строка рассматривается как продолжение предыдущей. Не ставьте больше никаких символов после обратного слэша.

gnuplot> plot "output.dat" using 1:2 with lines, \
> "output.dat" using 1:3 with lines,\
> "output.dat" using 1:4 with lines
plotcalc2

Значения второй линии, которая показана зелёным цветом, в основном отрицательны по X, поэтому по оси Y единичный отрезок равен -0.1

В легенде отображено имя файла и номера колонок, которые использовались для построения. Красная линия получена аналитической функцией, так что давайте изменим название первой линии в легенде на "Analytical". Зелёная линия получена по результатам аппроксимирующей функции Паде с L=1 и M=2, а синия линия - L=2, M=2.

gnuplot> plot "output.dat" using 1:2 title "Analytical" with lines, \
> "output.dat" using 1:3 title "L=1, M=2" with lines,\
> "output.dat" using 1:4 title "L=2, M=1" with lines
plotcalc3
up

Вставка название графика и названия осей

Теперь давайте подпишем оси X и Y. Название оси X - "x", а название оси Y - "y=exp(-x)". Чтобы установить такие названия, используем команды: set xlabel и set ylabel . Вы также можете вставить название графика: "Pade approximation" командой set title .

gnuplot> set xlabel "x"
gnuplot> set ylabel "y=exp(-x)"
gnuplot> set title "Pade approximation"
gnuplot> replot
plotcalc4

Размер графика изменяется, когда появляются заголовок и названия осей. Gnuplot определяет размер графика автоматически и отображает на экран, т.е. делает его меньше.

Название оси Y "y=exp(-x)" расположено не слевой стороны от оси, а сверху, т.к. gnuplot не может повернуть текст, когда используется терминал X Window. Если использовать терминал Postscript, это возможность станет доступной. Если вы используете версию gnuplot новее 3.8, то название оси Y-axis так же должно поворачиваться .

up

Изменение диапозонов осей X и Y

Изменить диапозон осей X и Y можно следующим способом:

gnuplot> set xrange [0:2]
gnuplot> set yrange [0:1]
gnuplot> replot
plotcalc5
up

Деления

Деления по оси X начинаются от 0, а интервал между ними устанавливается 0.5. Чтобы изменить деления используйте команду set {x|y}tics. Деления могут быть изменены тремя опциональными числами. Если после команды указано только одно число, например, set xtics 10, это число будет приращением. Если указано 2 числа, то первое - это начальное значение, второе - приращение. Если три, то последнее будет конечным значением.

Вы также можете использовать промежуточные деления с помощью команды set m{x|y}tics n, где n число делений.

gnuplot> set xtics 1
gnuplot> set mxtics 5
gnuplot> set ytics 0.5
gnuplot> set mytics 5
gnuplot> replot
up

Готово !

Теперь изменим терминал на Postscript и сохраним график. Сначала сменим терминал на "postscript" и зададим имя файла, куда нужно сохранить график. Перед тем как выйти из gnuplot, сохраните параметры и другие установки в файл (output.plt).

gnuplot> set term postscript
gnuplot> set output "output.ps"
gnuplot> replot
gnuplot> save "output.plt"
gnuplot> quit

Файл 'output.ps' может быть просмотрен через просмотрщик Postscript, такой как, 'gv' или 'ghostview', а также может быть распечатан с помощью Postscript printer. Следующее изображение - 'output.ps' открытое через ghostview.

plotcalc7

Когда вы построите график, первая линия будет красного цвета. Однако здесь она стала сплошной однотонной линией. Синия и зелёная линии стали пунктирными. Как вы можете заметить виды и типы линий и символов зависят от терминала, который вы используете. Чтобы узнать какой номер обозначает сплошуню, пунктирную, точечную и т.д. линии выполните команду test. Например при терминале X window вы полуите:

gnuplot> set term x11
gnuplot> test
plotcalc8
up