Григорий Рожков, 222гр. 09.11.2010

Post on 23-Feb-2016

76 views 0 download

description

Григорий Рожков, 222гр. 09.11.2010. Введение. matplotlib : библиотека языка программирования  Python связка matplotlib – NumPy кроссплатформенная библиотека API* идентичный MATLAB * API – Application Programming Interface – интерфейс программирования приложений. Введение. - PowerPoint PPT Presentation

Transcript of Григорий Рожков, 222гр. 09.11.2010

Григорий Рожков, 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пасибо за внимание!