Как сделать отображен

Задача: продолжить получать графику высокого качества не выходя из питона 🙂
�?нструмент: Matplotlib

Это продолжение предыдущего поста. Сегодня мы рассмотрим, как отобразить два графика в одном окне, как это сделать в разных окнах, как добавить математические выражения в подписи к осям и в любое место графика, а также, как подписать какую-нибудь деталь на графике, которая вам особенно нравится.

Работа с несколькими окнами и осями в Matplotlib

�? матлаб, и pyplot используют концепцию активного окна и активных осей. Все команды отрисовки чего бы то ни было применяются к именно к активным осям. Функция gca() возвращает активные оси (экземпляр класса matplotlib.axes.Axes), а gcf() возвращает активное окно (figure) (экземпляр класса matplotlib.figure.Figure). Ниже представлен скрипт для создания двух графиков на одном изображении:

import numpy as np
import matplotlib.pyplot as plt
def f(t):
    return np.exp(-t) np.cos(2np.pit)
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(2np.pit2), 'r--')
plt.show()

pyplot2011png.png

Команда figure() здесь не обязательна, поскольку figure(1) будет создано по умолчанию, также как и подокно (да, такое вот прекрасное слово 🙂 ) subplot(111) будет создано по умолчанию, если вы вручную не определили оси. Команда subplot() определяет на какое количество подокон будет разбито ваше окно, и в какое из них будет происходить ваш вывод. При этом в качестве аргументов она принимает количество строк (numrows), количество колонок (numcols) и номер подокна(fignum), который изменяется от 1 до numrowsnumcols (subplot(numrows,numcols,fignum)). Если numrowsnumcols < 10 то запятые ставить не обязательно, то есть subplot(211) и subplot(2,1,1) идентичны друг другу. Вы можете создать сколько угодно подокон и осей. Если вы хотите расположить оси (подокна) вручную, например не на прямоугольной сетке, а как-нибудь ёлочкой, используйте команду axes(), которая позволяет определить положение осей как axes([left, bottom, width, height]), где все значения изменяются от 0 до 1. Выглядеть это может так:

import numpy as np
import matplotlib.pyplot as plt
def f(t):
    return np.exp(-t) np.cos(2np.pit)
t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)
plt.figure(1)
plt.axes([0.55, 0.55, 0.4, 0.4])
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.axes([0.3, 0.3, 0.4, 0.4])
plt.plot(t2, np.cos(2np.pit2), 'r--')
plt.axes([0.05, 0.05, 0.4, 0.4])
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')
plt.show()

pyplot202r.png

Вы можете создать несколько окон, вызывая figure() с увеличивающимся номером окна. Конечно, каждое окно может содержать столько осей и подокон сколько вашей душе угодно.

import matplotlib.pyplot as plt
plt.figure(1)                # the first figure
plt.subplot(211)             # the first subplot in the first figure
plt.plot([1,2,3])
plt.subplot(212)             # the second subplot in the first figure
plt.plot([4,5,6])
plt.figure(2)                # a second figure
plt.plot([4,5,6])            # creates a subplot(111) by default
plt.figure(1)                # figure 1 current; subplot(212) still current
plt.subplot(211)             # make subplot(211) in figure1 current
plt.title('Easy as 1,2,3')   # subplot 211 title
plt.show()

Создаст два окна:
pyplot203r.png
pyplot204r.png

Вы можете очистить активное окно при помощи clf(), а активные оси при помощи cla().

Работа с текстом в matplotlib

Команду text() можно использовать для добавления текста в произвольном месте (по умолчанию координаты задаются в координатах активных осей), а команы xlabel(), ylabel() и title() служат соответственно для подписи оси абсцисс, оси ординат и всего графика. Для более полной информации смотрите Text introduction раздел на офсайте.

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()

pyplot205r.png

Все команды text() возвращают экземпляр matplotlib.text.Text. Точно также, как с линиями вы можете изменять свойства текста, передавая ключевые слова в текстовые функции или используя setp().

Так, чтобы сделать подпись к оси x красной и 14м размером шрифта, нужно написать:

t = plt.xlabel('my data', fontsize=14, color='red')

Более подробно это описано в Text properties and layout

�?спользование математических выражений в тексте

Matplotlib понимает формулы написанные в синтаксисе TeX и может вставлять их в любой текст. Например, для того, чтобы написать математическое выражение в заголовке, нужно окружить строку в формате TeX знаками доллара:

plt.title(r'$\sigma_i=15$')

Символ r перед строкой важен, он означает, что последующее это чистая строка и не нужно обрабатывать обратный слеш и escape символы (подробнее об этом тут ). У matplotlib есть свой встроенный парсер TeX выражений и движок вывода, также он предоставляет собственные математические шрифты (более детально Writing mathematical expressions ). Таким образом вы можете использовать математические выражения на любой платформе без необходимости устанавливать TeX. О том как скрестить matplotlib с LaTeX можно почитать в разделе Text rendering With LaTeX.

Если мы добавим эти пару строчек в предыдущий пример с гистограммой:

plt.text(60,.030, r'$\mu=100,\ \sigma=15$')
plt.text(50,.033, r'$\varphi_{\mu,\sigma^2}(x) = \frac{1}{\sigma\sqrt{2\pi}} \,e^{ -\frac{(x- \mu)^2}{2\sigma^2}} = \frac{1}{\sigma} \varphi\left(\frac{x - \mu}{\sigma}\right),\quad x\in\mathbb{R}$', fontsize=20, color='red')

то получим такую вот красоту:
pyplot206.png

Текстовые подписи

�?спользование команды text(), рассмотренной выше, помещает текст в произвольном месте графика. Часто текст используется для того, чтобы подписать какую-нибудь деталь на графике, и метод annotate() предоставляет вспомогательную функциональность для того, чтобы сделать подобное подписывание легче. Две основных вещи, которые вы должны предоставить этому методу — позицию той точки, которую вы будете подписывать (координаты x y) и позицию текста подписи. Чудесным образом между этими позициями будет проведена стрелочка, свойства которой вы тоже можете контролировать.

import numpy as np
import matplotlib.pyplot as plt
ax = plt.subplot(111)
t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2np.pit)
line, = plt.plot(t, s, lw=2)
plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
            arrowprops=dict(facecolor='black', shrink=0.05),
            )
plt.ylim(-2,2)
plt.show()

pyplot207.png

В этом простом примере позиции и xy (то куда направлена стрелка), и xytext (собственно подпись) задаются в координатах данных (активных осей). Можно выбрать и другие координатные системы, подробности в Annotating text


Источник: http://koldunov.net/?p=290

Закрыть ... [X]

1С:Вопросы и ответы » Как начислить отпускные в 1С 8.2? Декорации домиков своими руками

Как сделать отображен Руководство: как пользоваться мультиметром hardware
Как сделать отображен Matplotlib (pylab) простые вещи 2 Записки океанолога
Как сделать отображен Как определить MAC адрес вашего компьютера
Как сделать отображен Как проверить свой баланс на Йоте
Как сделать отображен Как начать играть - The Elder Scrolls Online
Как сделать отображен Как узнать IP адрес - wikiHow
Как сделать отображен 100 Вагонов Прицеп дача своими руками легко!
Как сделать отображен 6 способов как сделать скриншот в MIUI на Xiaomi - m
Как сделать отображен Арки межкомнатные декоративные в доме
Гистограмма в периоде с построением графиков по возрастанию Интернет магазин детских развивающих игрушек Как сделать в карточке Т-2 запись об отпуске за Как сделать стульчик своими руками: чертеж и Каланов Н.А. СЛОВАРЬ МОРСКОГО ЖАРГОНА : Морская библиотека Красивые Дачи фото Хитрости Ландшафтного