Визуализация данных с использованием matplotlib

Matplotlib — это библиотека Python для построения качественных двухмерных графиков.

Замечание. При работе с matplotlib в Debian Wheezy возникает ошибка:
«Matplotlib KeyError ItalicAngle в Debian Wheezy»
Решение проблемы описано здесь.


Рассмотрим некоторые примеры использования matplotlib.
Пример. Построить график функции $y = x^2$ на отрезке [-10, 10] с шагом изменения аргумента 0.01.

# -*- coding: utf8 -*-    
import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-10,10.01,0.01) #Массив значений аргумента
plt.plot(x,x**2) #Построение графика
plt.xlabel(r'$x$') #Метка по оси x в формате TeX
plt.ylabel(r'$f(x)$') #Метка по оси y в формате TeX
plt.title(r'$y=x^2$') #Заголовок в формате TeX
plt.grid(True) #Сетка
plt.show() #Показать график

Рисунок 1.

При построении графика можно использовать третий параметр, который позволяет изменять цвет и тип графика. Значение этого параметра по умолчанию равно 'b-', что означает сплошная синяя линия. Например, на следующем рисунке точки изображаются в виде кружков зеленого цвета.


import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-10,11,1) 
plt.plot(x,x**2,'go')
plt.show()

Рисунок 2.
Подробное описание различных стилей отображения графиков можно найти в документации.
Очень легко можно построить графики нескольких функций на одном рисунке.

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-10,10.01,0.01) 
plt.plot(x,np.sin(x),x,np.cos(x),x,-x)
plt.xlabel(r'$x$') 
plt.ylabel(r'$f(x)$') 
plt.title(r'$f_1(x)=\sin(x),\ f_2(x)=\cos(x),\ f_3(x)=-x$')
plt.grid(True)
plt.show()

Рисунок 3.
Работа с matplotlib основана на использовании графических окон и осей (оси позволяют задать некоторую графическую область). Все построения применяются к текущим осям. Это позволяет изображать несколько графиков в одном графическом окне. По умолчанию создается одно графическое окно figure(1) и одна графическая область subplot(111) в этом окне. Команда subplot позволяет разбить графическое окно на несколько областей. Она имеет три параметра: nr; nc; np. Параметры nr и nc определяют количество строк и столбцов на которые разбивается графическая область, параметр np определяет номер текущей области (np принимает значения от 1 до nr*nc). Если nr*nc<10, то передавать параметры nr,nc,np можно без использовния запятой. Например, допустимы формы subplot(2,2,1) и subplot(221).

import numpy as np
import matplotlib.pyplot as plt
x=np.arange(-10,10.01,0.01); t=np.arange(-10,11,1) 
#subplot 1
plt.subplot(221)
plt.plot(x,np.sin(x))
plt.title(r'$\sin(x)$')
plt.grid(True)
#subplot 2
plt.subplot(222)
plt.plot(x,np.cos(x),'g')
plt.axis('equal')
plt.grid(True)
plt.title(r'$\cos(x)$')
#subplot 3
plt.subplot(223)
plt.plot(x,x**2,t,t**2,'ro')
plt.title(r'$x^2$')
#subplot 4
plt.subplot(224)
plt.plot(x,x)
plt.subplot(224).spines['left'].set_position('center')
plt.subplot(224).spines['bottom'].set_position('center')
plt.title(r'$x$')
plt.show()

Рисунок 4.
Построение графика функции в полярной системе координат

import numpy as np
import matplotlib.pyplot as plt
plt.subplot(111, polar=True)
phi = np.arange(0,2*np.pi,0.01)
rho = 2*phi
plt.plot(phi, rho, lw=2)
plt.show()

Рисунок 5.
Построение графика функции, заданной параметрически

import numpy as np
import matplotlib.pyplot as plt
t = np.arange(0,2*np.pi,0.01)
r=4
plt.plot(r*np.sin(t),r*np.cos(t),lw=3)
plt.axis('equal')
plt.show()

Рисунок 6.
Построение графика функции двух переменных

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
ax = axes3d.Axes3D(plt.figure())
i = np.arange(-1, 1, 0.01)
X, Y = np.meshgrid(i, i)
Z = X**2-Y**2
ax.plot_wireframe(X, Y, Z, rstride=10, cstride=10)
plt.show()

Рисунок 7.

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
ax = axes3d.Axes3D(plt.figure())
i = np.arange(-1, 1, 0.01)
X, Y = np.meshgrid(i, i)
Z = X**2-Y**2
ax.plot_surface(X, Y, Z, rstride=10, cstride=10)
plt.show()

Рисунок 8.
Построение графика функции двух переменных, заданной параметрически

from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
import numpy as np
ax = axes3d.Axes3D(plt.figure())
u = np.linspace(0, 2*np.pi, 100)
v = np.linspace(0, np.pi, 100)
r=5
x = r * np.outer(np.cos(u), np.sin(v))
y = r * np.outer(np.sin(u), np.sin(v))
z = r * np.outer(np.ones(np.size(u)), np.cos(v))
ax.plot_surface(x, y, z,  rstride=4, cstride=4)
plt.show()

Рисунок 9.
  • avatar
  • +1

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.