Часто для различных научно-технических надобностей требуется график с двумя осями ординат (осями Y) и одной общей осью абсцисс (осью X). Вот python скрипт, который строит такой график.
1 # -*- coding: UTF-8 -*- 2 3 import matplotlib as mpl 4 import matplotlib.pyplot as plt 5 6 # Значения по оси X (Большая часть данных опущена) 7 8 # Время, ч 9 10 X = [0.00, 0.08, 0.17, ... 3.42, 3.50] 11 12 # Значения по осям Y (Большая часть данных опущена) 13 14 # Степнь разложения 15 16 Y_01 = [0.0000, 0.0000, 0.0000, ... 0.8180, 0.8482] 17 18 # Температура, oC 19 20 Y_02 = [ 21, 30, 70, ... 721, 724 ] 21 22 # Задем размеры изображения диаграммы 23 24 mpl.rcParams['figure.figsize'] = (8.0, 6.0) 25 26 # Строим диаграмму 27 28 # Получаем ссылку на объект типа matplotlib.axes.AxesSubplot, текущую диаграмму 29 30 ax_01 = plt.axes() 31 32 # Задаем исходные данные для первой линии диаграммы (линии степени разложения), внешний вид линии и маркера. 33 # Функция plot() возвращает ссылку на объект класса matplotlib.lines.Line2D 34 35 line_01, = ax_01.plot(X, Y_01, 'bh:') 36 37 # Задаем интервалы значений по осям X и основной оси Y 38 39 ax_01.axis([-0.04, 3.6, -0.01, 0.90]) 40 41 # Включаем сетку по оси X и основной оси Y. Задаем цвет сетки 42 43 ax_01.grid(color = 'b') 44 45 # Задаем подписи к осям X и основной оси Y 46 47 ax_01.set_xlabel(u'Время, ч') 48 ax_01.set_ylabel(u'Степень разложения') 49 50 # Задаем заголовок диаграммы 51 52 ax_01.set_title(u'Термограмма разложения оксалата кальция') 53 54 # Включаем дополнительную ось Y 55 56 ax_02 = ax_01.twinx() 57 58 # Задаем исходные данные для второй линии диаграммы (линии степени разложения), внешний вид линии и маркера. 59 # Функция plot() возвращает ссылку на объект класса matplotlib.lines.Line2D 60 61 line_02 = ax_02.plot(X, Y_02, 'ro:') 62 63 # Задаем интервалы значений по осям X и дополнительной оси Y 64 65 ax_02.axis([-0.04, 3.6, 0.0, 800.0]) 66 67 # Задаем подпись к дополнительной оси Y 68 69 ax_02.set_ylabel(u'Температура, \u00b0C') 70 71 # Включаем сетку по дополнительной оси Y. Задаем цвет сетки 72 73 ax_02.grid(color = 'r') 74 75 # Задаем исходные данные для легенды и место ее размещение 76 77 ax_02.legend((line_01, line_02), (u'Степень разложения', u'Температура'), loc = 'best') 78 79 # Сохраняем построенную диаграмму в файл 80 # Задаем имя файла и его тип 81 82 plt.savefig('termo.png', format = 'png')
В результате выполнения скрипта, в файле termo.png будет сохранено такое изображение:

Пояснения к скрипту.
В начале небольшое отступление. Matplotlib при работе со своими графическими объектами придерживается следующей идеологии: существуют текущая фигура (в документации figure) и текущая гм... диаграмма (в документации axes). Фигура это некое полотно на котором происходит построение чего либо. Диаграмма это объект принадлежащий фигуре (одной фигуре может принадлежать несколько диаграмм), к которому собственно и применяются команды pyplot. Диаграммы могут быть различных типов (в нашем случае прямоугольная 2D - обычный график). Тип диаграммы задается командой её построения (в нашем случае plot()) и определяет назначение диаграммы, внешний вид, свойства и возможные действия с ней.
В выражении ax_01 = plt.axes() мы получаем ссылку на объект типа matplotlib.axes.AxesSubplot - текущую диаграмму. Далее, при построении графика, мы пользуемся методами этого объекта, действие которых в целом аналогично действию рассмотренным в предыдущих постах функций модуля pyplot.
После построения первой линии диаграммы (зависимости степени разложения от времени) создаем новый объект класса matplotlib.axes.Axes и получаем ссылку на него: ax_02 = ax_01.twinx(). В результате на диаграмму ax_01 будет "наложена" вторая диаграмма ax_02, при этом, ось X будет общей для обеих диаграмм. Далее с помощью тех же методов, только уже принадлежащими объекту ax_02 строим и оформляем вторую линию (зависимость температуры от времени).
Вот и все, сохраняем получившееся творение.
Подробнее о фигурах и диаграммах поговорим позже.
Предыдущий пост по теме: Пакет matplotlib. Строим банальный график.
Следующий пост по теме: Пакет matplotlib. Наводим красивости.
Спасибо за познавательную статью!
ОтветитьУдалить