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