Matplotlib — мощная библиотека Python для создания визуализаций, но иногда размещение легенды по умолчанию может загромождать ваши графики. Эта статья демонстрирует эффективные методы размещения легенд за пределами области графика для повышения читаемости.
Содержание
- Использование
bbox_to_anchor
для размещения легенды - Предотвращение обрезания легенд с помощью
bbox_extra_artists
иbbox_inches
Использование bbox_to_anchor
для размещения легенды
Аргумент bbox_to_anchor
в функции legend()
обеспечивает точное позиционирование легенды. Он принимает кортеж (x, y), указывающий на нижний левый угол легенды в координатах фигуры. (0,0) — это нижний левый угол, а (1,1) — верхний правый. Аргумент loc
дополнительно уточняет размещение внутри этой точки привязки.
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.plot(x, y2, label='cos(x)')
ax.legend(bbox_to_anchor=(1.1, 1), loc='upper left') # Настройте (1.1,1) по мере необходимости
ax.set_title('Синусоидальные и косинусоидальные волны')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.tight_layout()
plt.show()
Здесь bbox_to_anchor=(1.1, 1)
размещает легенду немного справа от графика (x=1.1) и сверху (y=1). loc='upper left'
выравнивает легенду внутри этой точки привязки. Экспериментируйте с различными значениями loc
(например, ‘upper right’, ‘lower left’, ‘center’) и настраивайте координаты (x,y) для оптимального позиционирования.
Предотвращение обрезания легенд с помощью bbox_extra_artists
и bbox_inches
Большие легенды или плотные фигуры могут приводить к обрезанию легенд даже с bbox_to_anchor
. bbox_extra_artists
и bbox_inches
решают эту проблему. bbox_extra_artists
включает легенду в вычисление ограничительной рамки для сохранения, а bbox_inches='tight'
обеспечивает узкие поля, предотвращая обрезку.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 500) # Больше данных для большей легенды
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')
ax.plot(x, y3, label='tan(x)')
leg = ax.legend(bbox_to_anchor=(1.05, 1), loc='upper left')
fig.savefig('legend_outside.png', bbox_extra_artists=[leg], bbox_inches='tight')
plt.show()
Легенда хранится в leg
, а затем передается в bbox_extra_artists
в savefig
. bbox_inches='tight'
гарантирует, что вся фигура, включая легенду, будет сохранена. Замените 'legend_outside.png'
на желаемое имя файла.
Эти методы обеспечивают гибкое и эффективное размещение легенды в Matplotlib, повышая ясность и визуальную привлекательность ваших графиков. Экспериментируйте с различными параметрами, чтобы добиться идеальной компоновки.