2010-11-09_matplotlib_v1

advertisement
Григорий Рожков, 222гр.
09.11.2010
Введение
matplotlib:
o библиотека языка программирования Python
o связка matplotlib – NumPy
o кроссплатформенная библиотека
o API* идентичный MATLAB
*API – Application Programming Interface – интерфейс программирования
приложений.
Введение
matplotlib:
oнаписан на Python
o background – на C
o автор – John Hunter
o поддерживаются версии Python 2.4 – 2.6
o tries to make easy things easy and hard things possible.
Философия
Пользователь должен иметь
возможность создать простейший
график, используя небольшое число
команд.
Структура библиотеки
Код библиотеки можно разделить на три части.
I
pylab interface – набор функций, предоставленных
matplotlib.pylab, позволяющий пользователю
создавать графики с помощью кода,
аналогичного коду MATLAB
II
matplotlib frontend (matplotlib API) – набор
классов, осуществляющий создание и
последующее управление сложными
графиками, фигурами, изображениями и т.п.
Этот интерфейс ничего не знает о формате
вывода объектов.
III
backends - зависящие от устройства способы
вывода графиков (aka рендеры),
превращающие frontend объекты в объекты,
которые можно вывести на печать или
дисплей.
pyplot
opyplot – набор функций, делающий matplotlib похожим
на MATLAB.
oВсе, что нарисовано, - фигура.
oКаждая функция как-то по-своему меняет график.
pyplot
Простейшая программа, рисующая
график выглядит так:
>>>import matplotlib.pyplot as plt
>>>plt.plot ([1, 2, 3, 4])
>>>plt.ylabel (‘some numbers’)
>>>plt.show ()
Немного изменив ее, получаем:
>>> import matplotlib.pyplot as plt
>>> plt.plot ([0, 1, 2, 1, 2])
>>> plt.xlabel (“you read this^^”)
>>> plt.arrow (0, 0, 2, 1)
>>> plt.axis([0, 10, 0, 10])
>>>plt.annotate(“you are here!”, xy=(2, 2), xytext=(5, 5)
arrowprops=dict(facecolor=‘red', shrink=0.05))
>>>plt.grid (True)
>>> plt.show ()
Точечные графики
import numpy as np
import matplotlib.pyplot as plt
# evenly sampled time at 200ms intervals
t = np.arange(0., 5., 0.2)
# red dashes, blue squares and green triangles
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')
plt.show ()
import matplotlib.pyplot as plt
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show ()
Подграфик и гистограмма
import numpy as np
import matplotlib.pyplot as plt
def f(t): return np.exp(-t) * np.cos(2*np.pi*t)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()
import numpy as np
import matplotlib.pyplot as plt
mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)
# the histogram of the data
n, bins, patches = plt.hist(x, 50, normed=1, facecolor='g', alpha=0.75)
plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show ()
Отрисовка фигур
ells = [Ellipse(xy=rand(2)*10, width=rand(), height=rand(), angle=rand()*360)
for i in xrange(NUM)]
Диаграмма
>>>plt.legend( (rects1[0], rects2[0]), ('Men', 'Women') )
>>>rects1 = plt.bar(ind, menMeans, width,
color='r',
yerr=menStd,
error_kw=dict(elinewidth=6, ecolor='pink'))
Улучшения диаграммы
Пирог
pie(fracs, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True)
title('Raining Hogs and Dogs', bbox={'facecolor':'0.8', 'pad':5})
Элементы оформления
import numpy as np
import matplotlib.pyplot as plt
styles = mpatch.BoxStyle.get_styles()
figheight = (len(styles)+.5)
fig1 = plt.figure(1, (4/1.5, figheight/1.5))
fontsize = 0.3 * 72
for i, (stylename, styleclass) in enumerate(styles.items()):
fig1.text(0.5, (float(len(styles)) - 0.5 - i)/figheight,
stylename,
ha="center",
size=fontsize,
transform=fig1.transFigure,
bbox=dict(boxstyle=stylename, fc="w", ec="k"))
plt.draw()
plt.show()
Полярные координаты
subplot(211, polar=True)
Интерактивные графики
def toggle_images(event):
'toggle the visible state of the two images'
if event.key != 't': return
b1 = im1.get_visible()
b2 = im2.get_visible()
im1.set_visible(not b1)
im2.set_visible(not b2)
draw()
3D графики
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FixedLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca (projection='3d')
X = np.arange (-5, 5, 0.25)
Y = np.arange (-5, 5, 0.25)
X, Y = np.meshgrid (X, Y)
R = np.sqrt (X**2 + Y**2)
Z = np.sin(R)
surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
cmap=cm.jet, linewidth=0, antialiased=False)
ax.set_zlim3d(-1.01, 1.01)
ax.w_zaxis.set_major_locator(LinearLocator(10))
ax.w_zaxis.set_major_formatter(FormatStrFormatter('%.03f'))
fig.colorbar(surf, shrink=0.5, aspect=5)
plt.show()
Функция Розенброка
F(x,y) = 100.(y - x2)2 + (1 - x)2
Colormaps
Filters
LaTeX
rc('text', usetex=True)
title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
fontsize=16, color='r')
Структура matplotlib API
Интерфейс matplotlib состоит из трех слоев.
I
matplotlib.backend_bases.FigureCanvas –
область, на которой рисуется фигура.
II
matplotlib.backend_bases.Renderer –
объект, который знает как рисовать
на FigureCanvas.
III
matplotlib.artist.Artist –
объект, который знает, как использовать
Renderer, чтобы нарисовать что-либо на
FigureCanvas.
Структура matplotlib API
o FigureCanvas и Renderer обрабатывают все
взаимодействия внутри программы
o Artist отвечает за конструкции более высокого
уровня – такие как представление фигур, линий и
текста на экране, и их взаимного расположения.
o Сам пользователь около 95% своего времени
проводит взаимодействуя с Artist’ом.
Artists
Существуют два типа Artist:
I. primitive – представляет собой обычные
графические объекты, такие как линии, текст, 2D
графики и т.п.
II. containers – места для размещения primitive
(Axis, Axes и Figure).
Использование matplotlib
matplotlib используется многими людьми во
многих областях:
o автоматическая генерация PostScript файлов для
отсылки на печать
o генерация png и gif – изображений для
динамически генерирующихся веб-страниц
o для математических исследований
Cпасибо за внимание!
Download