Top.Mail.Ru

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!

Добавить комментарий

Sidebar