Matplotlib – мощная библиотека Python для визуализации данных. Часто возникает необходимость добавления нескольких графиков на один рисунок для сравнения или представления информации с разных точек зрения. В этой статье мы рассмотрим различные способы добавления новых графиков к существующему рисунку в Matplotlib, предоставим примеры кода и обсудим распространенные ошибки.
Основы работы с фигурами и осями в Matplotlib
Что такое Figure и Axes?
В Matplotlib, Figure – это весь рисунок, который может содержать один или несколько графиков. Axes – это отдельный график внутри Figure, содержащий оси, данные и другие элементы визуализации. Важно понимать разницу между ними для эффективной работы с библиотекой.
Создание базовой фигуры и осей
Перед тем, как добавлять графики, необходимо создать Figure и Axes. Вот пример:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
# или
fig = plt.figure()
ax = fig.add_subplot(111) # row, col, index
Методы добавления графиков на существующую фигуру
Использование add_subplot() для создания нескольких графиков
Метод add_subplot() позволяет добавлять графики в определенные позиции на Figure. Аргументы определяют сетку графиков (количество строк и столбцов) и индекс текущего графика.
import matplotlib.pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(211) # 2 строки, 1 столбец, первый график
ax2 = fig.add_subplot(212) # 2 строки, 1 столбец, второй график
ax1.plot([1, 2, 3], [4, 5, 6])
ax2.scatter([1, 2, 3], [7, 8, 9])
plt.show()
Метод subplots() для организации сетки графиков
plt.subplots() — более удобный способ создания нескольких графиков. Он возвращает Figure и массив Axes.
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=2, ncols=2)
axes[0, 0].plot([1, 2, 3], [4, 5, 6]) # График в позиции (0, 0)
axes[0, 1].scatter([1, 2, 3], [7, 8, 9]) # График в позиции (0, 1)
axes[1, 0].bar([1, 2, 3], [10, 11, 12]) # График в позиции (1, 0)
axes[1, 1].hist([1, 2, 2, 3, 3, 3], bins=3) # График в позиции (1, 1)
plt.show()
Наложение графиков и создание связанных осей
Добавление нескольких графиков на одни и те же оси
Можно добавлять несколько графиков на одни и те же оси, вызывая методы plot(), scatter() и другие для одного и того же объекта Axes.
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
ax.plot([1, 2, 3], [4, 5, 6], label='Линия 1')
ax.plot([1, 2, 3], [7, 8, 9], label='Линия 2')
ax.legend()
plt.show()
Использование twinx() и twiny() для наложения графиков с разными шкалами
twinx() создает новые оси, разделяющие x-ось с существующими осями, но имеющие собственную y-ось. twiny() делает то же самое для y-оси.
import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
ax1.plot([1, 2, 3], [4, 5, 6], 'g-', label='Данные 1')
ax2.plot([1, 2, 3], [10, 20, 30], 'b-', label='Данные 2')
ax1.set_xlabel('Ось X')
ax1.set_ylabel('Ось Y1', color='g')
ax2.set_ylabel('Ось Y2', color='b')
plt.show()
Практические примеры и распространенные ошибки
Примеры добавления различных типов графиков
import matplotlib.pyplot as plt
import numpy as np
# Создание данных
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
# Линейный график
ax.plot(x, y1, label='sin(x)')
# Точечный график
ax.scatter(x[::5], y2[::5], label='cos(x)', marker='x')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.legend()
ax.set_title('Линейный и точечный графики')
plt.show()
Типичные ошибки при работе с несколькими графиками
-
Неправильное использование
add_subplot(): Ошибка в индексации может привести к перекрытию графиков или их отсутствию. -
Забывание о вызове
plt.show(): График не отображается, если не вызватьplt.show(). -
Некорректная работа с осями: При использовании
twinx()илиtwiny()необходимо правильно настроить метки и цвета осей. -
Отсутствие легенды: При добавлении нескольких графиков на одни оси, важно использовать легенду (
ax.legend()) для идентификации. -
Игнорирование
tight_layout(): Использованиеplt.tight_layout()передplt.show()предотвращает перекрытия элементов графиков.
Заключение
Matplotlib предоставляет гибкие инструменты для добавления нескольких графиков на один рисунок. Правильное использование add_subplot(), subplots(), twinx() и twiny() позволяет создавать сложные и информативные визуализации. Понимание основ работы с Figure и Axes, а также избежание распространенных ошибок, поможет вам эффективно использовать возможности этой библиотеки.