Как правильно сделать сетку на окно

Как правильно сделать сетку на окно
Как правильно сделать сетку на окно
Как правильно сделать сетку на окно
Как правильно сделать сетку на окно
Как правильно сделать сетку на окно

Задача: продолжить получать графику высокого качества не выходя из питона 🙂
�?нструмент: 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

Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно Как правильно сделать сетку на окно

Тоже читают:



Рукоделие схемы игрушек

Электрические схемы автомобиля byd

Как загрузить схему в sprint layout

Картинка поздравления с днем медицинского работника

Как легко плести браслеты из резинок схема