Форум программистов, компьютерный форум, киберфорум
WH
Войти
Регистрация
Восстановить пароль
Рейтинг: 5.00. Голосов: 1.

Gnu_Plot

Запись от WH размещена 31.10.2018 в 15:01
Обновил(-а) WH 19.01.2020 в 08:17

GnuPlot - довольно интересная и универсальная штука построения различных графических материалов. Рассмотрим самые простые примеры использования gnuplot с fortran программой.

Установка gnuplot в среде Linux (на примере ubuntu) не представляет сложности. Для этого достаточно дать команду
Код:
sudo apt-get install gnuplot
или очень удобно использовать менеджер пакетов synaptic.


Напишем, для демонстрации работы, простую фортран программу вычисления точек функций sin(x) и sin(2x)/2


Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
program main
implicit none
 
 real :: x, y1, y2
 x=0
 
 open(unit=100,file='log_data')
 
    do while (x < 10)
        y1=sin(x)
        y2=sin(2*x)/2
        write (100,*) x, y1, y2
        x=x+0.01
    end do
 
 close(100)  
 
 call system('gnuplot -p log_plot.plt')
end program main
Программа создаст файл log_data в который столбцами запишет координаты точек x, y1, y2, и сама вызовет gnuplot для построения 2-х графиков функций sin(x) и sin(2x)/2.

Перед запуском программы должен быть создан файл log_plot.plt (имя можно задать произвольным), в который записывается скрипт работы gnuplot. Файл размещается в той же папке, в которой лежит программа расчета и файл с данными. В данном случае этот файл выглядит следующим образом:

Код:
m="./log_data"
set terminal x11 0
set grid
set xlabel "x"
set ylabel "y1, y2"
set title ' shedule sin'
plot m using 1:2 title "sin(x)"  with lines, \
""using 1:3 title "sin(2x)/2" with lines
Указания using 1:2 и using 1:3 означают, что данные для построения графиков берутся из первого и второго столбцов и из первого и третьего столбцов данных. Кавычки "" в начале последней строки (точнее отсутствие информации между ними) указывают, что данные для второго графика берутся из того же самого файла, ведь есть возможность строить графики из набора разных файлов. Например вместо кавычек можно указать указатель n, предварительно указав имя файла n="./log1_data".
В результате работы на экране компьютера мы автоматически получим графики функций, как на приведенном скрине. Если нужен график одной функции, то последняя строка скрипта исключается, а предпоследняя строка должна закончится без запятой и слеша.


Этот же график можно построить из записанных ранее данных без вызова фортран программы:
Код:
cd ~/проекты/Fortran
gnuplot
plot "log_data" using 1:2 with lines, "" using 1:3 with lines
однако по этой команде не будет выведена легенда (хотя это можно сделать указав в команде все нужные опции). Или же в терминале операционной системы можно дать команду
Код:
gnuplot -p log_plot.plt
в этом случае gnuplot построит график с учетом всех опций, записанных в файле log_plot.plt.

Графики функций можно вывести в файл. Для этого командой set terminal png нужно установить терминал gnuplot в режим записи файла, перед тем как будут отданы команды на построение графика. В этом случае скрипт может выглядеть следующим образом:

Код:
m="./log_data"
#set terminal x11 0  это закоментированная знаком # строчка
set terminal png
set output "plot_sin.png"
set grid
set xzeroaxis lt -1
set yzeroaxis lt -1
set xlabel "x"
set ylabel "y1, y2"
set title ' shedule sin'
plot m using 1:2 title "sin(x)"  with lines, \
""using 1:3 title "sin(2x)/2" with lines
график будет выведен в файл plot_sin.png.

Разрешение графика можно изменить опцией size. К примеру если нужно построить график с разрешением 1024,768 нужно записать так
Код:
set terminal png size 1024,768
Часто представляет интерес создание графиков с логарифмическими сетками по осям, это делается записью set logscale [имя оси], размещаемой в скрипте gnuplot. Для наглядности построим график функции десятичного логарифма в логарифмической же шкале по оси X, в результате получим прямую линию.

Fortran
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
program main
implicit none
 
 real :: x, y
 x=1
 
 open(100,file='log_data')
 
    do while (x < 1e+5)
       y = log10(x)
       write (100,*) x, y
       x=x+10
    end do
 
 close(100)  
 
 call system('gnuplot -p log_plot.plt')
end program main
файл log_plot.plt
Код:
m="./log_data"
set terminal x11 0
set grid
set grid mxtics
#set logscale y
set logscale x
set xlabel "x"
set ylabel "y"
set title ' shedule log10'
plot m using 1:2 title "log(x)"  with lines
Запись set grid mxtics файла рисует по оси Х дополнительную сетку.

Графики из приведенных примеров можно построить и непосредственно из командной строки gnuplot или записанного скрипта (тем более, что gnuplot имеет собственный несложный язык), однако в большинстве случаев, когда построение графиков требуется по результатам какого-то более сложного математического расчета, использование gnuplot совместно с вычислительной программой может оказаться очень полезным и удобным.

Возможности gnuplot довольно богаты, есть возможность строить графики в полярных координатах, строить векторы, диаграммы, в том числе в 3-х мерном виде, делать различное оформление и т.д., полный перечень можно найти в документации или многочисленных ресурсах в сети интернет, (например здесь).

ps Полученные и представленные здесь графические файлы немного отличаются друг от друга внешне. Первый график получен экспортом непосредственно в файл, как описано выше, второй получен как "скрин", копированием с экрана монитора.
Миниатюры
Нажмите на изображение для увеличения
Название: plot_sin.png
Просмотров: 176
Размер:	9.0 Кб
ID:	5075   Нажмите на изображение для увеличения
Название: log10.png
Просмотров: 210
Размер:	7.0 Кб
ID:	5076  
Размещено в Без категории
Просмотров 476 Комментарии 0
Всего комментариев 0
Комментарии
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.