При создании сложных визуализаций с использованием Matplotlib обычно имеется несколько подграфиков, каждый со своей легендой. Однако отображение отдельных легенд для каждого подграфика может загромождать рисунок и затруднить его интерпретацию. В этой статье мы рассмотрим различные методы объединения нескольких легенд подграфиков в одну, что обеспечивает более четкую и интуитивно понятную визуализацию.
Метод 1: использование одной легенды для всех подграфиков.
Один из подходов к объединению легенд предполагает создание единой легенды, которая представляет все подграфики. Вот пример того, как этого можно добиться:
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# Plotting data in subplots
# Subplot 1
axs[0, 0].plot(x1, y1, label='Data 1')
# Subplot 2
axs[0, 1].plot(x2, y2, label='Data 2')
# Subplot 3
axs[1, 0].plot(x3, y3, label='Data 3')
# Subplot 4
axs[1, 1].plot(x4, y4, label='Data 4')
# Creating a single legend for all subplots
lines, labels = fig.axes[-1].get_legend_handles_labels()
fig.legend(lines, labels, loc='upper center')
plt.show()
В этом методе мы сначала создаем подграфики, используя plt.subplots()
. Затем мы отображаем данные на каждом подграфике, указывая метку для каждого набора данных. Наконец, мы извлекаем маркеры и метки из последнего подграфика, используя get_legend_handles_labels()
, и создаем одну легенду, используя fig.legend()
.
Метод 2: извлечение легенд из подграфиков и объединение
Другой подход предполагает извлечение легенд из каждого подграфика и объединение их в одну легенду. Вот пример:
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# Plotting data in subplots
# Subplot 1
line1, = axs[0, 0].plot(x1, y1, label='Data 1')
# Subplot 2
line2, = axs[0, 1].plot(x2, y2, label='Data 2')
# Subplot 3
line3, = axs[1, 0].plot(x3, y3, label='Data 3')
# Subplot 4
line4, = axs[1, 1].plot(x4, y4, label='Data 4')
# Merging legends from subplots
lines = [line1, line2, line3, line4]
labels = [line.get_label() for line in lines]
fig.legend(lines, labels, loc='upper center')
plt.show()
В этом методе мы присваиваем построенную линию каждого подграфика переменной. Затем мы извлекаем метки из каждой строки и создаем одну легенду, используя fig.legend()
.
Метод 3: использование прокси-художников
Прокси-художники предоставляют альтернативный подход к объединению легенд. Они позволяют нам создавать собственные записи легенды, которые представляют несколько подграфиков. Вот пример:
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# Plotting data in subplots
# Subplot 1
axs[0, 0].plot(x1, y1)
# Subplot 2
axs[0, 1].plot(x2, y2)
# Subplot 3
axs[1, 0].plot(x3, y3)
# Subplot 4
axs[1, 1].plot(x4, y4)
# Creating proxy artists for legend
patch1 = mpatches.Patch(color='blue', label='Data 1')
patch2 = mpatches.Patch(color='orange', label='Data 2')
patch3 = mpatches.Patch(color='green', label='Data 3')
patch4 = mpatches.Patch(color='red', label='Data 4')
# Creating a single legend for all subplots
fig.legend(handles=[patch1, patch2, patch3, patch4], loc='upper center')
plt.show()
В этом методе мы отображаем данные на каждом подграфике без явного указания меток. Вместо этого мы создаем пользовательские записи легенды, используя mpatches.Patch
, и назначаем разные цвета или маркеры для представления каждого набора данных. Наконец, мы создаем одну легенду, используя fig.legend()
.