глобальная легенда для всех сюжетов

Я создаю матрицу n x n подзаголовков matplot, которые содержат кривую одного типа (давайте назовем их signal1 и signal2):

n=5
f, axarr = plt.subplots(n,n)
for i,signal_generator in enumerate(signal_generators):
  y=i%n
  x=(i-y)/n
  axarr[x, y].plot(signal_generator.signal1)
  axarr[x, y].plot(signal_generator.signal2)

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

Как бы я это сделал?


person user1934212    schedule 26.08.2016    source источник


Ответы (1)


Один из способов сделать это — создать дополнительное пространство под графиками. Затем вы можете разместить легенду прямо здесь и получить одну «глобальную» легенду.

import matplotlib.pyplot as plt
import numpy as np

plt.close('all')

fig, axlist = plt.subplots(3, 3)
for ax in axlist.flatten():
    line1, = ax.plot(np.random.random(100), label='data1')
    line2, = ax.plot(np.random.random(100), label='data2')
    line3, = ax.plot(np.random.random(100), 'o', label='data3')

fig.subplots_adjust(top=0.9, left=0.1, right=0.9, bottom=0.12)  # create some space below the plots by increasing the bottom-value
axlist.flatten()[-2].legend(loc='upper center', bbox_to_anchor=(0.5, -0.12), ncol=3)
# it would of course be better with a nicer handle to the middle-bottom axis object, but since I know it is the second last one in my 3 x 3 grid...

fig.show()

Теперь под предпоследней (нижней средней) областью оси будет метка благодаря bbox_to_anchor=(x, y) с отрицательным значением y. В зависимости от того, сколько у вас разных подзаголовков и сколько разных линий вы рисуете в каждом подзаговоре, может быть лучше правильно отслеживать различные линейные объекты. Может быть, добавить их в список.

Для меня это выходная цифра выглядит так

введите описание изображения здесь

Дает ли это вам желание, которое вы искали?

person pathoren    schedule 26.08.2016
comment
Спасибо за вашу помощь - решение, которое я придумал, заключалось в добавлении легенды только к первому сюжету. Но у вас намного лучше и чище. - person user1934212; 30.08.2016