Python Matplotlib: Как добавить новый график к существующему рисунку с примерами

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, а также избежание распространенных ошибок, поможет вам эффективно использовать возможности этой библиотеки.


Добавить комментарий