Как создать единую легенду для всех субботов в Matplotlib

  1. Сделайте единую легенду для всех подгрупп с помощью метода figure.legend в Matplotlib
  2. Сделайте единую легенду для всех подгрупп с помощью метода figure.legend, когда ручки и линии линий в Matplotlib различаются

Класс Matplotlib figure имеет метод legend для размещения legend на уровне фигуры, но не на уровне подплощадки. Это особенно удобно, если шаблон линий и метки одинаковы среди всех подплотов.

Сделайте единую легенду для всех подгрупп с помощью метода figure.legend в Matplotlib

import matplotlib.pyplot as plt

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)


for ax in fig.axes:
    ax.plot([0, 10], [0, 10], label='linear')

lines, labels = fig.axes[-1].get_legend_handles_labels()
    
fig.legend(lines, labels, loc = 'upper center')

plt.show()

Matplotlib Фигура Легенда - получить легенда ручки ручки этикетки

lines, labels = fig.axes[-1].get_legend_handles_labels()

Потому что у нас есть предположение, что все подплотты имеют одинаковые строки и метки, поэтому последние ручки и метки последних Axes могут быть использованы для всей фигуры.

Сделайте единую легенду для всех подгрупп с помощью метода figure.legend, когда ручки и линии линий в Matplotlib различаются

Если деталь линии и метки различаются между подплоттами, но для всех подплоттов требуется одна легенда, то необходимо получить все дескрипторы и метки линии со всех подплоттов.

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 501)

fig = plt.figure()
axes = fig.subplots(nrows=2, ncols=2)

axes[0, 0].plot(x,
                np.sin(x),
                color = 'k',
                label="sin(x)")
axes[0, 1].plot(x,
                np.cos(x),                
                color = 'b',
                label="cos(x)")
axes[1, 0].plot(x,
                np.sin(x) + np.cos(x),
                color = 'r',
                label="sin(x)+cos(x)")
axes[1, 1].plot(x,
                np.sin(x) - np.cos(x),
                color = 'm',
                label="sin(x)-cos(x)")

lines = []
labels = []

for ax in fig.axes:
    axLine, axLabel = ax.get_legend_handles_labels()
    lines.extend(axLine)
    labels.extend(axLabel)

    
fig.legend(lines, labels,           
           loc = 'upper right')

plt.show()

Рисунок Matplotlib Рисунок Legend_all labelels from get_legend_handles_labels

for ax in fig.axes:
    axLine, axLabel = ax.get_legend_handles_labels()
    lines.extend(axLine)
    labels.extend(axLabel)

Все дескрипторы и метки строк добавляются в список lines и labels со списком extend в случае, если в одном подслоте больше строк и меток.

Сопутствующая статья - Matplotlib Legend

  • Как изменить размер шрифта легенды в Matplotlib
  • comments powered by Disqus