Matplotlib (pylab) простые вещи
Задача: получить графику высокого качества не выходя из питона
Инструмент: Matplotlib
Этим постом я начинаю серию вольных переводов избранных отрывков .
Это питоновская библиотека для создания двухмерных графиков высокого качества (publication quality). Сделана с таким расчётом чтобы переход на неё доставил минимальные затруднения опытным пользователям матлаба. Как говориться на сайте библиотеки, Matplotlib старается сделать простые вещи простыми а сложные вещи возможными.
Как выглядит создаваемая графика можно
Как устанавливать библиотеку я уже писал
Начнём с простого графика и контроля свойств линии.
Каждая функция совершает различные изменения с изображением, например создаёт изображение, создаёт область построения на изображении, рисует линии в области построения, добавляет подписи и так далее. При этом matplotlib.pyplot отслеживает состояние текущего изображения, и области построения, так что отрисовывающие функции применяются к текущим осям.
plt.plot([1,2,3])
plt.ylabel('some numbers')
plt.show()

Может возникнуть вопрос почему по оси x у нас значения от 0 до 2, а по y от 1 до 3. Если вы передадите один список или массив команде plot(), то matplotlib воспринимает его как последовательность y значений и автоматически генерирует значения x. Поскольку питон начинает считать с 0, по умолчанию вектор x имеет такую же длинну как y, но начинается с нуля. Таким образом данные x будут [0,1,2].
plot() универсальная команда и в неё можно передавать произвольное количество аргументов. Например для того чтобы отобразить y в зависимости от x, можно выполнить команду:
Для каждой пары аргументов xy, существует необязательный третий аргумент, строка форматирования, которая определяет цвет и тип линии. Буквы и символы строки форматирования такие же как в матлабе и также как там вы объединяете буквы и символы определяющие цвет и тип линии. По умолчанию строка форматирования выглядит как ‘b-‘, что значит непрерывная синяя линия. Для того чтобы отобразить данные из предыдущего примера красными кружками, нужно ввести
plt.plot([1,2,3,4], [1,4,9,16], 'ro')
plt.axis([0, 6, 0, 20])

Полный список стилей можно найти на . Команда axis() получает в качестве аргументов [xmin, xmax, ymin, ymax] которые устанавливают минимальные и максимальные границы осей.
Если бы matplotlib мог работать только со списками, ты был бы довольно бесполезен для обработки данных. Как правило вы будете использовать матрицы . Фактически внутри matplotlib все данные переводятся в матрицы numpy. Пример ниже строит несколько линий из данных в матрицах, каждую со своим форматированием используя всего одну команду (конечно у вас должен быть уже установлен numpy ).
import matplotlib.pyplot as plt
# равномерно распределённые значения от 0 до 5, с шагом 0.2
t = np.arange(0., 5., 0.2)
# красные чёрточки, синие квадраты и зелёные треугольники
plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')

Свойства линии
У линий есть множество атрибутов которые вы можете установить: толщина, стиль, антиалиасинг и так далее. Для подробностей смотрите . есть несколько способов установить свойства линии
- Использовать ключевые слова, то есть вы пишете свойство и присваиваете ему значение:
plt.plot(x, y, linewidth=2.0)
- Использовать команду setp(). Пример ниже использует синтаксис похожий на матлабовский для того чтобы установить несколько свойств для списка линий. setp работает как со списком объектов, так и с одиночным объектом. Вы можете использовать либо аргументы ключевые слова либо матлабовский стиль строка/значение.
lines = plt.plot(x1, y1, x2, y2)
# use keyword args
plt.setp(lines, color='r', linewidth=2.0)
# or matlab style string value pairs
plt.setp(lines, 'color', 'r', 'linewidth', 2.0) - Есть ещё третий способ, но я его пока не понимаю и отправляю интересующихся.
В следующий раз мы поговорим о нескольких графиках и осях на одном изображении а также о работе с текстом.