Menu
CoddyTech

Шпаргалка по Matplotlib

Последнее обновление

Figure и axes

Figure это всё изображение целиком. Axes это один график внутри него, и почти каждый вызов ниже это метод ax.

ЗадачаКод
Импорт pyplotimport matplotlib.pyplot as plt
Одна figure с одним графикомfig, ax = plt.subplots()
Размер в дюймахfig, ax = plt.subplots(figsize=(8, 4))
Рисовать на axesax.plot(x, y)
Показать figureplt.show()
Сохранить чёткий PNGfig.savefig("chart.png", dpi=150, bbox_inches="tight")
Сохранить в векторном форматеfig.savefig("chart.svg"), fig.savefig("chart.pdf")
Прозрачный фонfig.savefig("chart.png", transparent=True)
Закрыть figure и освободить памятьplt.close(fig)
Быстрый график в стиле pyplotplt.plot(x, y) plt.title("Quick look") plt.show()

Типы графиков

ЗадачаКод
Линейный графикax.plot(x, y)
Диаграмма рассеянияax.scatter(x, y, s=20, alpha=0.7)
Рассеяние с цветом по значению и шкалойpoints = ax.scatter(x, y, c=y, cmap="viridis") fig.colorbar(points, ax=ax)
Столбчатая диаграммаax.bar(cats, a)
Горизонтальные столбцыax.barh(cats, a)
Столбцы с накоплениемax.bar(cats, a, label="2025") ax.bar(cats, b, bottom=a, label="2026")
Сгруппированные столбцыpos = np.arange(len(cats)) ax.bar(pos - 0.2, a, width=0.4) ax.bar(pos + 0.2, b, width=0.4) ax.set_xticks(pos, labels=cats)
Гистограммаax.hist(data, bins=30)
Ящик с усамиax.boxplot([data, data * 2], tick_labels=["A", "B"])
Скрипичная диаграммаax.violinplot([data, data * 2])
Круговая диаграммаax.pie([40, 35, 25], labels=cats, autopct="%1.0f%%")
Полоса между двумя кривымиax.fill_between(x, y - 0.2, y + 0.2, alpha=0.3)
Планки погрешностейax.errorbar([1, 2, 3], [4, 5, 3], yerr=[0.5, 0.3, 0.6], fmt="o", capsize=4)
Ступенчатый графикax.step(x, y, where="mid")
Тепловая карта 2D-массиваimage = ax.imshow(np.random.default_rng(0).random((5, 5)), cmap="magma") fig.colorbar(image, ax=ax)
Контурный график с заливкойX, Y = np.meshgrid(x, x) ax.contourf(X, Y, np.sin(X) * np.cos(Y), levels=20)
Плотность множества точекax.hexbin(data, data + np.random.default_rng(1).normal(size=200), gridsize=20)
Горизонтальная или вертикальная линияax.axhline(0, color="gray", linestyle="--"), ax.axvline(5)
Закрасить диапазонax.axvspan(2, 4, alpha=0.2)

Линии, маркеры и цвета

ЗадачаКод
Цвет, толщина и стиль линииax.plot(x, y, color="tab:red", linewidth=2, linestyle="--")
Маркеры на точкахax.plot(x, y, marker="o", markersize=4)
Короткая строка форматаax.plot(x, y, "g--o")
Прозрачностьax.plot(x, y, alpha=0.5)
Стили линий"-", "--", "-.", ":"
Коды маркеров"o", "s", "^", "x", ".", "*"
Способы задать цвет"tab:blue", "C1", "#1f77b4", (0.2, 0.4, 0.6)
n цветов из colormapcolors = plt.colormaps["viridis"](np.linspace(0, 1, 5))
Свой цикл цветовax.set_prop_cycle(color=["#0b7285", "#e8590c", "#5f3dc4"])
Столбцы с обводкой и штриховкойax.bar(cats, a, color="white", edgecolor="black", hatch="//")

Заголовки, подписи и легенды

ЗадачаКод
Заголовок и подписи осейax.set_title("Sales"), ax.set_xlabel("Month"), ax.set_ylabel("EUR")
Всё одним вызовомax.set(title="Sales", xlabel="Month", ylabel="EUR")
Легенда из подписей линийax.plot(x, y, label="sin") ax.legend()
Положение и столбцы легендыax.legend(loc="upper right", ncols=2, frameon=False)
Легенда за пределами графикаax.legend(loc="center left", bbox_to_anchor=(1, 0.5))
Текст в точке данныхax.text(5, 0.5, "note")
Аннотация со стрелкойax.annotate("peak", xy=(1.57, 1), xytext=(3, 1.2), arrowprops=dict(arrowstyle="->"))
Значения над столбцамиbars = ax.bar(cats, a) ax.bar_label(bars)
Заголовок всей figurefig.suptitle("Q1 report")
Формулы в подписяхax.set_xlabel(r"$\alpha$ (rad)")

Оси, деления и шкалы

ЗадачаКод
Границы осейax.set_xlim(0, 10), ax.set_ylim(bottom=0)
Логарифмическая шкалаax.set_yscale("log")
Свои деления и подписи к нимax.set_xticks([0, 5, 10], labels=["start", "middle", "end"])
Повернуть подписи деленийax.tick_params(axis="x", labelrotation=45)
Линии сеткиax.grid(True, alpha=0.3)
Ось в процентахfrom matplotlib.ticker import PercentFormatter ax.yaxis.set_major_formatter(PercentFormatter(1.0))
Разделитель тысячax.yaxis.set_major_formatter("{x:,.0f}")
Убрать верхнюю и правую рамкуax.spines[["top", "right"]].set_visible(False)
Вторая ось y справаax2 = ax.twinx() ax2.plot(x, y * 100, color="tab:orange")
Одинаковый масштаб по осямax.set_aspect("equal")
Перевернуть осьax.invert_yaxis()
Полностью скрыть осиax.axis("off")
Читаемые подписи датfig.autofmt_xdate()

Subplots и компоновка

plt.subplots(rows, cols) возвращает массив NumPy из axes. Обращайся к нему по индексам, как к обычному массиву.

ЗадачаКод
Сетка графиковfig, axs = plt.subplots(2, 2, figsize=(8, 6))
Рисовать на одном из нихaxs[0, 1].plot(x, y)
Цикл по всем графикамfor ax in axs.flat: ax.grid(True)
Общая ось для графиковfig, axs = plt.subplots(1, 3, sharey=True)
Отступы без наложенийfig, axs = plt.subplots(2, 2, layout="constrained")
Убрать наложения после отрисовкиfig.tight_layout()
Столбцы разной шириныfig, axs = plt.subplots(1, 2, width_ratios=[3, 1])
Именованная схема с широкой панельюfig, axd = plt.subplot_mosaic([["top", "top"], ["left", "right"]]) axd["top"].plot(x, y)
Маленький график внутри графикаinset = ax.inset_axes([0.6, 0.6, 0.35, 0.35])
Скрыть пустую панельaxs[0].axis("off")

Стили и настройки по умолчанию

ЗадачаКод
Встроенный стильplt.style.use("ggplot")
Список стилейplt.style.available
Вид seaborn без seabornplt.style.use("seaborn-v0_8-whitegrid")
Стиль только для одной figurewith plt.style.context("dark_background"): fig, ax = plt.subplots()
Размер шрифта по умолчаниюplt.rcParams["font.size"] = 12
Размер и разрешение figure по умолчаниюplt.rcParams["figure.figsize"] = (8, 4), plt.rcParams["figure.dpi"] = 120
Вернуть настройки по умолчаниюplt.style.use("default")
Популярные colormap: последовательные, расходящиеся, серые"viridis", "coolwarm", "Greys"

Графики из pandas

pandas рисует через Matplotlib. Передай ax=, чтобы рисовать в свои axes, или сохрани ax, который возвращает pandas.

ЗадачаКод
Столбцы DataFrame в свои axesdf.plot(x="month", y="sales", ax=ax)
Столбчатая диаграмма по группамdf.groupby("city")["sales"].sum().plot.bar(ax=ax)
Доработать то, что нарисовал pandasax = df.plot(x="month", y="sales") ax.set_title("Sales")
Столбцы напрямую в Matplotlibax.plot(df["month"], df["sales"])

Matplotlib 3.11: старые формы и что писать теперь

Код из старых туториалов в Matplotlib 3.11 может падать или выдавать предупреждения. Пиши вместо него то, что указано в столбце Matplotlib 3.11.

ЗадачаMatplotlib 3.11Старая форма
Подписи ящика с усамиax.boxplot([data, data * 2], tick_labels=["A", "B"])labels=["A", "B"]
Горизонтальный ящик или скрипкаax.boxplot(data, orientation="horizontal")vert=False
Получить colormapplt.colormaps["viridis"]plt.cm.get_cmap("viridis")
Стиль seabornplt.style.use("seaborn-v0_8")plt.style.use("seaborn")

Код Matplotlib, который превращает данные в понятный график, разбитый по задачам: figure и axes, типы графиков, линии и цвета, заголовки и легенды, оси и деления, subplots и компоновка, стили и графики из pandas. В каждой строке короткий фрагмент кода, который можно сразу вставить, и одна строчка о том, что он делает.

Всё здесь написано в объектно-ориентированном стиле (fig, ax = plt.subplots(), а дальше методы ax) для Matplotlib 3.11, той версии, что работает на Coddy. Старые формы вроде labels= в boxplot остались только в последней таблице, рядом с тем, что писать вместо них. В примерах используются x = np.linspace(0, 10, 50), y = np.sin(x) и выборка нормально распределённых значений data. Только начинаешь с Python? Загляни в шпаргалку по Python, а рядом с этой шпаргалкой держи шпаргалки по pandas, NumPy и scikit-learn.

Частые вопросы о шпаргалке по Matplotlib

Эта шпаргалка по Matplotlib бесплатная?
Да. Эта шпаргалка по Matplotlib полностью бесплатна, регистрация не нужна. Добавь её в закладки или сохрани в PDF через печать в браузере и возвращайся, когда нужно вспомнить точный вызов для легенды, сетки subplots или цветовой шкалы.
Чем plt отличается от ax?
plt.plot() рисует на текущих axes, какими бы они ни были, и это удобно для одного быстрого графика. fig, ax = plt.subplots() даёт тебе figure и axes как объекты, поэтому ax.plot() всегда рисует именно там, где нужно. Используй стиль с ax везде, где графиков больше одного, и в коде, который ты будешь сохранять.
Как изменить размер figure?
Передай figsize в дюймах при создании figure: fig, ax = plt.subplots(figsize=(10, 5)). Чтобы изменить размер по умолчанию для всех figure, задай plt.rcParams["figure.figsize"] = (10, 5). Размер сохранённого файла в пикселях равен figsize, умноженному на dpi.
Как сохранить график в высоком разрешении?
Вызови fig.savefig("chart.png", dpi=300, bbox_inches="tight"). Чем выше dpi, тем чётче PNG, а bbox_inches="tight" обрезает пустые поля. Для печати или слайдов сохраняй в SVG или PDF: они остаются чёткими при любом размере.
Почему заголовки и подписи subplots налезают друг на друга?
Создавай figure с layout="constrained", например plt.subplots(2, 2, layout="constrained"), и Matplotlib сам освободит место для заголовков, подписей и цветовых шкал. Для уже созданной figure вызови fig.tight_layout() после отрисовки.
Какую версию Matplotlib охватывает шпаргалка?
Matplotlib 3.11, ту версию, что работает на Coddy. Вызовы, которые в новых версиях удалили или переименовали, например labels= в boxplot (теперь tick_labels=) и plt.cm.get_cmap (теперь plt.colormaps[...]), собраны в последней таблице рядом с тем, что писать вместо них.
Можно ли запускать код Matplotlib онлайн?
Да. Бесплатная песочница Matplotlib запускает Python с Matplotlib, NumPy, pandas и scikit-learn прямо в браузере и показывает графики рядом с выводом, так что любой фрагмент из этой шпаргалки можно вставить и сразу увидеть график без установки. В курсе Coddy по машинному обучению такие графики помогают изучить данные перед обучением модели.
Иллюстрация языков программирования Coddy

Изучайте Matplotlib с Coddy

НАЧАТЬ