330 likes | 486 Views
Григорий Рожков, 222гр. 09.11.2010. Введение. matplotlib : библиотека языка программирования Python связка matplotlib – NumPy кроссплатформенная библиотека API* идентичный MATLAB * API – Application Programming Interface – интерфейс программирования приложений. Введение.
E N D
Григорий Рожков, 222гр. 09.11.2010
Введение • matplotlib: • библиотека языка программирования Python • связка matplotlib– NumPy • кроссплатформеннаябиблиотека • API* идентичный MATLAB • *API – Application Programming Interface – интерфейс программирования приложений.
Введение • matplotlib: • написан на Python • background – на C • автор – John Hunter • поддерживаются версии Python 2.4 – 2.6 • 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 • pyplot– набор функций, делающий matplotlibпохожим на MATLAB. • Все, что нарисовано, - фигура. • Каждая функция как-то по-своему меняет график.
pyplot Простейшая программа, рисующая график выглядит так: >>>importmatplotlib.pyplotasplt >>>plt.plot ([1, 2, 3, 4]) >>>plt.ylabel (‘some numbers’) >>>plt.show () Немного изменив ее, получаем: >>> importmatplotlib.pyplotasplt >>> 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 ()
Точечные графики importnumpyasnp importmatplotlib.pyplotasplt # evenly sampled time at 200ms intervals t = np.arange(0., 5., 0.2) # red dashes, blue squares and green trianglesplt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^') plt.show () importmatplotlib.pyplotasplt plt.plot([1,2,3,4], [1,4,9,16], 'ro') plt.axis([0, 6, 0, 20]) plt.show ()
Подграфик и гистограмма importnumpyasnp importmatplotlib.pyplotasplt 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 () importnumpyasnp importmatplotlib.pyplotasplt deff(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})
Элементы оформления importnumpyasnp importmatplotlib.pyplotasplt 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)
Интерактивные графики deftoggle_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 графики frommpl_toolkits.mplot3dimportAxes3D frommatplotlibimportcm frommatplotlib.tickerimportLinearLocator, FixedLocator, FormatStrFormatter importmatplotlib.pyplotasplt importnumpyasnp 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
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 • FigureCanvasи Rendererобрабатывают все взаимодействия внутри программы • Artistотвечает за конструкции более высокого уровня – такие как представление фигур, линий и текста на экране, и их взаимного расположения. • Сам пользователь около 95% своего времени проводит взаимодействуя с Artist’ом.
Artists Существуют два типа Artist: primitive – представляет собой обычные графические объекты, такие как линии, текст, 2D графики и т.п. containers – места для размещения primitive (Axis, Axes и Figure).
Использование matplotlib • matplotlibиспользуется многими людьми во многих областях: • автоматическая генерация PostScript файлов для отсылки на печать • генерация pngи gif – изображений для динамически генерирующихся веб-страниц • для математических исследований