Григорий Рожков, 222гр. 09.11.2010
DESCRIPTION
Григорий Рожков, 222гр. 09.11.2010. Введение. matplotlib : библиотека языка программирования Python связка matplotlib – NumPy кроссплатформенная библиотека API* идентичный MATLAB * API – Application Programming Interface – интерфейс программирования приложений. Введение. - PowerPoint PPT PresentationTRANSCRIPT
Григорий Рожков, 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 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 # 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 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 ()
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()
Отрисовка фигур
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
title(r"\TeX\ is Number $\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!", fontsize=16, color='r')
rc('text', usetex=True)
Структура 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).
Использование matplotlibmatplotlib используется многими людьми во многих областях:
o автоматическая генерация PostScript файлов для отсылки на печать
o генерация png и gif – изображений для динамически генерирующихся веб-страниц
o для математических исследований
Cпасибо за внимание!