Символ
|
Маркер
|
Символ
|
Маркер
|
) )
|
жирная точка
|
’s’
|
квадрат
|
’о’
|
круг
|
>р>
|
пятиконечная звезда
|
’V»
|
треугольник вершиной вниз
|
|
*
|
) - )
|
треугольник вершиной вверх
|
|
+
|
|
треугольник вершиной влево
|
>х>
|
X
|
|
треугольник вершиной вправо
|
’d’
|
ромб
|
Замена строки
pit.plot(х, yl, х, у2, х, уЗ, ’:’)
в программе рисования графика на рис. 3.3 на строку pit.plot(х, yl, ’р’, X, у2, ’s’, х, уЗ, ’сН) дает рис. 3.4.
При выводе графика можно использовать различные цвета линий (табл. 3.7). Комбинируя типы линий, маркеров с цветом мы можем получить необходимое представление для графика. Например, при использовании функции plot(x, у, ’го: О график будет нарисован в виде пунктирной красной линии с круговыми маркерами.
Таблица 3.7 Цвет графика
Символ
|
Цвет
|
Символ
|
Цвет
|
’Ъ’
|
синий (blue)
|
’т’
|
малиновый (magenta)
|
’с»
|
циановый (cyan)
|
’г’
|
красный (red)
|
*g*
|
зеленый (green)
|
’V’
|
белый (white)
|
’к’
|
черный (black)
|
’Г
|
желтый (yellow)
|
Изменить график можно используя различную толщину линий и размер маркера. Для этого задаются аргументы linewidth. (lw) и markersize (ms) функции plot О, например, plot(x, у, lw=2, ws=4), по умолчанию оба параметра равны 1.
Элементы оформления
Дополнительную смысловую нагрузку графику придают его заголовок, название осей, координатная сетка и легенда. В пакете Matplotlib эти возможности поддерживаются функциями titleO, xlabel(), ylabelO, gridO, legendO.
Функция titleO помещает заголовок (строка с названием обязательный аргумент) па график. Можно использовать команды издательской системы ВТ^Кдля маггемати чес кого текста. Для поддержки русского языка в Matplotlib нужны специальные усилия, поэтому на первых порах лучше использовать английский язык. Для контроля размера шрифта используется параметр fontsize со значениями: ’large’, ’medium’, ’small’ либо явный размер. Положение заголовка по вертикали определяется параметром verticalalign- ment (va), который выбирается из: ’top’, ’baseline’, ’bottom’, ’center’. Положение по горизонтали определяется horizontalalignment (ha) со значениями ’center’, ’left’, ’right’.
Для надписей на осях используются функции xlabelQ, ylabelO. Функция axis() управляет диапазонами изменения по осям х и у. Новые диапазоны задаются командой axis(xmin, xmax, ymin, ушах). Кроме этого функция имеется возможность дополнительных манипуляций с осями. Например, команда axis (’off ’) удаляет оси, axis (’equal’) — выравнивает диапазоны изменения по осям и т.д.
При рисовании нескольких графиков полезно идентифицировать отдельных графики с помощью легенды. Для добавления легенды используется функция legendO при задании аргумента label в виде строки в функции plot() для каждого графика. Вторая возможность связана с явным заданием меток в виде списка или кортежа строк как аргумента функции legendO. Локализация легенды проводится по аргументу 1ос) (см. табл. 3.8).
Таблица 3.8 Полоо/сение легенды графика
Срока
’best’
|
Код
0
|
’center left’
|
6
|
’upper right’
|
1
|
’center right’
|
7
|
’upper left’
|
2
|
’lower center’
|
8
|
’lower left’
|
3
|
’upper center’
|
9
|
’lower right’
|
4
|
’center’
|
10
|
’right’
|
5
|
|
|
Для отображения координатной сетки используется функция grid О с возможностью конкретизации свойств линий. Дополнительный контроль шага координатной сетки предоставляют функции xticksO и yticksO.
Ниже представлена программа, которая иллюстрирует некоторые возможности по оформлению графика (рис. 3.5).
import mimpy as np import matplotlib.pyplot as pit x = np.linspace(0., 1., 100) yl = np.sin(2*np.pi*x) y2 = x*x
plt.plot(x, yl, label=’$sin(2\pi x)$’)
pit.plot(x, y2, label=’$x~2$’)
pit.title(’The fuctions $sin(2\pi x)$ and $x~2$’, \ fontsize=’large’, va=’bottom’, ha=’right’) plt.xlabel(’$x$’) pit.ylabel(’$f(x)$’) pit.legend(loc=’lower left’) pit.grid(True) pit. showO
Выше мы рассмотрели возможности рисования одного графика. Отметим некоторые основные возможности более сложной организации графического материала. Свяжем интерактивное графическое окно или графический файл с фигурой (областью рисования) и будем рассматривать ее как контай- мент графиков. В своей вычислительной практике нам может понадобиться
The factions $in(2nx) and
подготовить несколько фигур и каждая их фигур может включать несколько графиков.
Пример работы с двумя фигурами, показанный на рис. 3.6, реализован следующим образом.
import пшпру as пр
import matplotlib.pyplot as pit
x = np.linspace(0., 1., 100)
pit.figure(1)
pit.plot(x, x*x)
pit.figure(2)
plt.plot(x, x/(l+x))
pit.show()
Рассмотрим теперь проблему размещения нескольких графиков на одной фигуре. Первая возможность связана с использованием функции subplot (), которая разделяет фигуру на несколько прямоугольных областей равного размера, расположенных подобно элементам матрицы. Первый аргумент этой функции определяет количество строк (numrows), второй — количество колонок (numcols) в активной фигуре и третий — номер графика (fignum). Если
Рис. 3.6 Две фигуры
numrows+numcols < 10 то запятые ставить не обязательно, так что вместо subplot(1,2,1) можно использовать subplot(121).
На рис. 3.7 приведен результат работы программы:
import numpy as np
import matplotlib.pyplot as pit
x = np.linspace(0., 1., 100)
pit.figure(1)
pit.subplot(211)
pit.plot(x, x*x)
pit.subplot(212)
pit.plot(x, x/(1+x))
pit.show()
Имеется возможность ручного расположения графиков на фигуре. Для этого нужно воспользоваться функцией axes(). Аргументом этой функции является список [left, bottom, width, height], который задает положение графика на фигуре в относительных координатах (все значения изменяются от 0 до 1). Эти возможности иллюстрируются программой
import numpy as np
import matplotlib.pyplot as pit x = np.linspace(0., 1., 100) pit.figure(1)
pit.axes( [0.05, 0.05, 0.6, 0.6]) pit.plot(x, x*x)
pit.axes([0.35, 0.35, 0.6, 0.6]) pit.plot(x, x/(1+x)) pit.show()
результатом работы которой является рис. 3.8.
ID графики
К базовым возможностям любого программного инструментария научной визуализации относятся графическое представлении одномерных и двумерных расчетных данных. Примеры использования функции plot О, которые приведены выше, демонстрировали возможность строить графики зависимостей У = /(ж) (одномерные функциональные зависимости). Остановимся на дру- гих возможностях Ш графики в пакете Matplotlib.
Рис. 3.8 Ручное задание положения графиков
Для отображения графиков величин, который заданы с погрешностью, используется функция errorbarO. После массива абсцисс и массива ординат в качестве третьего аргумента передается погрешность ординаты. Расширенные возможности включают погрешности в задании абсциссы. Пример использования функции errorbarO приведен ниже, результат — на рис. 3.9.
import пшпру as пр import matplotlib.pyplot as pit x = np.linspace(0., 1., 100) у = np.exp(-x)
e = 0.l*np.random.normal(0, 1, 100) pit.errorbar(x, y, e, fmt=,.0 pit.showО
Простейший способ построения графиков в полярных координатах (р, ф) связан с использованием функции polar О вместо plot О. Первый аргумент этой функции угол ?, второй — р. Программа для рисования кардиоиды :
import пшпру as пр import matplotlib.pyplot as pit phi = np.linspace(0., 2*np.pi, 100) ro = 5*(1 + np.cos(phi)) pit.axis(’off’)
pit.title(’Cardioid’) pit.polar(phi, ro) pit.show()
Функция axis (’off ’) используется для того, чтобы не рисовать (рис. 3.10) декартовы оси, которые рисуются по умолчанию.
Для создания более обозримого графика вдоль одной или обеих координатных осей можно выбирать логарифмический масштаб. Для построения таких графиков вместо plot О используются функции loglogO (логарифмический масштаб по обеим осям), semilogxO (логарифмический масштаб по оси ж), semi logy (логарифмический масштаб по оси у). Примером является график на рис. 3.11, который получен с использованием следующей программы.
import numpy as np
import matplotlib.pyplot as pit
x = np.linspace(0., 1., 100)
у = np.exp(-10*x*x)
pit.semilogy(x,у)
pit.show()
Для графическое изображение зависимости частоты попадания элементов выборки от соответствующего интервала группировки используются гисто-
Carc?ioid
Рис. ЗЛО Полярные координаты
граммы. Возможность построения гистограмм реализуется функцией hist О, первый аргумент которой есть массив данных, а второй задает число интервалов. Здесь приведен пример трех гистограмм для выборки из 250, 500 и 1000 случайных нормально распределенных величин соответственно (рис. 3.12).
import numpy as np import matplotlib.pyplot as pit mu = 1 sigma =0.2
x = mu + sigma*np.random.randn(1000) plt.hist(x, 25) pit.show()
Иногда приходиться используют для визуализации результатов различного рода диаграммы — столбцовые и круговые. Для рисования столбцовых диаграмм используется функция bar О (barh() для горизонтальных). Пример использования (см. рис. 3.13) иллюстрируется программой:
import numpy as np
import matplotlib.pyplot as pit
pos = np.linspace(0., 1., 10)
Рис. 3.11 Логарифмический масштаб
val = 3 + np.random.randn(10)
plt.barCpos, val, align=>center9, width=0.1, colors m’) pit.show()
Подобные инструменты характерны для деловой графики при небольшом объеме представляемых данных и не имеют большого значения для научных вычислений.
2D графики
При проведении численных расчетов большое внимание уделяется визуализации двумерных данных. На этой основе реализуются те или иные инструменты для представления и более общих трехмерных данных, используя визуализацию па отдельных поверхностях и сечениях. Здесь мы отметим основные возможности построения 2D графиков в пакете Matplotlib.
Рассматривается задача построения графика двумерной функции z = /(ж, 2/). Считается, что значения заданы на прямоугольной сетке, т.е. двумерный массив (матрица) размерности тхп. Массивы х и у могут быть векторами размерности п и га соответственно или матрицами (с одинаковыми строками или столбцами) 'гой же размерности, что и г.
Do'stlaringiz bilan baham: |