Python. Научная графика
В python есть мощная библиотека matplotlib, которая позволяет работать с научной графикой. Для установки данной библиотеки нужно выполнить команду «python -m pip install matplotlib». При выполнении данной команды библиотека будет автоматически скачана и установлена.
После установки мы можем импортировать библиотеку в свою программу на Python:
import matplotlib as mpl # Вывод на экран текущей версии библиотеки matplotlib print ('Current version on matplotlib library is', mpl.__version__)
Важная часть библиотеки matplotlib является класс pyplot. Его то мы сейчас и рассмотрим. Начнем со своеобразного графического «Hello, World!»:
import matplotlib.pyplot as plt fig = plt.figure() # Создание объекта Figure print (fig.axes) # Список текущих областей рисования пуст print (type(fig)) # тип объекта Figure plt.scatter(1.0, 1.0) # scatter - метод для нанесения маркера в точке (1.0, 1.0) # После нанесения графического элемента в виде маркера # список текущих областей состоит из одной области print (fig.axes) plt.show()
Данная программа покажет координатную плоскость и точку на ней:
А теперь попробуем нанести несколько точек, например, построить график некой функции, значение которой приведено в списке:
import matplotlib.pyplot as plt fig = plt.figure() # Создание объекта Figure print (fig.axes) # Список текущих областей рисования пуст print (type(fig)) # тип объекта Figure fx=[3,3.1,3.2,3.15,3.1,2.9,2.6,2.5,2.3,2.1,1.5,1,0.7] x=0 for y in fx: plt.scatter(x, y) x=x+0.1 # После нанесения графического элемента в виде маркера # список текущих областей состоит из одной области print (fig.axes) plt.show()
И вот что из этого получиться:
А теперь попробуем построить график какой-нибудь функции:
import matplotlib.pyplot as plt import numpy as np lag = 0.1 #Задаем шаг x = np.arange(0.0, 4*np.pi+lag, lag) #Вычисляем массив значений X y = np.sin(x) #Вычисляем значения функции #Строим график fig = plt.figure() plt.plot(x, y) #Отображаем заголовки и подписи осей plt.title('График функции') plt.ylabel('Ось Y') plt.xlabel('Ось X') plt.grid(True) plt.show()
И вот как этот график будет выглядеть:
На график можно наносить текстовые метки:
plt.text(-0.5, 0.8, 'Монотонно возрастает', fontsize=8, bbox=dict(edgecolor='w', color='w'), rotation=78) plt.text(2.5, 0.8, 'Монотонно убывает', fontsize=8, bbox=dict(edgecolor='w', color='w'), rotation=105)
И вот как это будет выглядеть:
Интересно, что картинку можно сохранить в файл. Для этого у класса piplot есть метод savefig. Вот пример его использования для реализации специальной функции save():
import os import matplotlib.pyplot as plt import numpy as np def save(name='', fmt='png'): pwd = os.getcwd() iPath = 'd:\\1\\'.format(fmt) if not os.path.exists(iPath): os.mkdir(iPath) os.chdir(iPath) plt.savefig('{}.{}'.format(name, fmt), fmt='png') os.chdir(pwd)
Данная функция позволит нам сохранять результат графического вывода в файлах изображений, например, png, а также, внезапно, в PDF формате! Продемонстрируем это на примере:
N = 100 n = np.sqrt(N) x = np.arange(n) # Задаём выборку из Гамма-распредления с параметрами формы=1. и масштаба=0. z = np.random.random(N).reshape(n, n) y = z[5,:] fig = plt.figure() cc = plt.contourf(z, alpha=0.5) # трёхмерное поле plt.plot(x, y, label='line', color='red') # красная линия plt.title('1a. Title') # заголовок plt.xlabel('2a. Xlabel') # подпись оси OX plt.ylabel('3a. Ylabel') # подпись оси OY plt.legend() # легенда cbar = plt.colorbar(cc) # цветовая шкала plt.text(2.5, 7, '1. Axes', fontsize=26, bbox=dict(edgecolor='w', color='w')) plt.text(4, -0.5, '2. XAxis', fontsize=18, bbox=dict(edgecolor='w', color='w')) plt.text(-0.5, 3.8, '3. YAxis', fontsize=18, bbox=dict(edgecolor='w', color='w'), rotation=90) plt.text(6.3, 7.2, '4. Legend', fontsize=16, bbox=dict(edgecolor='w', color='w')) plt.text(9.1, 5., '5. Colorbar', fontsize=16, bbox=dict(edgecolor='w', color='w'), rotation=90) plt.text(7., 0.8, '6. Xticks', fontsize=12, bbox=dict(edgecolor='w', color='w')) plt.text(0.8, 8.4, '7. Yticks', fontsize=12, bbox=dict(edgecolor='w', color='w'), rotation=90) # Подписи для цветовых шкал имеют отличный от остальных подписей синтаксис cbar.ax.set_xlabel('5a. Colorbar Xlabel', color='k', rotation=30) cbar.ax.set_ylabel('5b. Colorbar Ylabel', color='k') plt.text(2.8, 4.8,'6. Grid lines', fontsize=14) plt.grid(True) # сохраняем результат save('pic_1_5_2', fmt='pdf') save('pic_1_5_2', fmt='png') plt.show()
Кроме того, что программа покажет картинку, она еще и сохранит ее в файл:
В данном примере мы построили трехмерную функции вид сверху, типа топографической карты, когда высота отображается определенным цветом.
Еще можно строить различные гистограммы, круговые диаграммы:
И кучу других видов диаграмм, см. пример:
import os import matplotlib.pyplot as plt import numpy as np s = ['one','two','three ','four' ,'five'] x = [1, 2, 3, 4, 5] z = np.random.random(100) z1 = [10, 17, 24, 16, 22] z2 = [12, 14, 21, 13, 17] # bar() fig = plt.figure() plt.bar(x, z1) plt.title('Простая диаграмма (bar)') plt.grid(True) # линии вспомогательной сетки # hist() fig = plt.figure() plt.hist(z) plt.title('Гистограмма (histogramm)') plt.grid(True) # pie() fig = plt.figure() plt.pie(x, labels=s) plt.title('Круговая диаграмма') # boxplot() fig = plt.figure() plt.boxplot([z1, z2]) plt.title('Simple box whisker chart') plt.grid(True) # errorbar() fig = plt.figure() plt.errorbar(x, z1, xerr=1, yerr=0.5) plt.title('Диаграмма ошибок (errorbar)') plt.grid(True) plt.show()
Comments
So empty here ... leave a comment!