Подтвердить что ты не робот

Можно ли добавить строку как элемент легенды в matplotlib

Я делаю некоторые графики в matplotlib и хотел бы добавить пояснительный текст для некоторых данных. Я хочу, чтобы строка внутри моей легенды была отдельной надписью над элементом "0-10". Кто-нибудь знает, есть ли способ сделать это?

enter image description here

Это код моей легенды:
ax.legend(['0-10','10-100','100-500','500+'],loc='best')

4b9b3361

Ответ 1

Конечно. ax.legend() имеет форму двух аргументов, которая принимает список объектов (дескрипторов) и список строк (меток). Используйте фиктивный объект (aka прокси-исполнителя) для вашей дополнительной строки. Я выбрал matplotlib.patches.Rectangle без заполнения и 0 linewdith ниже, но вы можете использовать любого поддерживаемого исполнителя.

Например, скажем, у вас есть 4 бара (поскольку вы не отправляли код, используемый для генерации графика, я не могу воспроизвести его точно).

import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle
fig = plt.figure()
ax = fig.add_subplot(111)
bar_0_10 = ax.bar(np.arange(0,10), np.arange(1,11), color="k")
bar_10_100 = ax.bar(np.arange(0,10), np.arange(30,40), bottom=np.arange(1,11), color="g")
# create blank rectangle
extra = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)
ax.legend([extra, bar_0_10, bar_10_100], ("My explanatory text", "0-10", "10-100"))
plt.show()

example output

Ответ 2

Альтернативное решение, вроде грязное, но довольно быстрое.

import pylab as plt

X = range(50)
Y = range(50)

plt.plot(X, Y, label="Very strait line")
#Create empty plot with blank marker containing the extra label
plt.plot([], [], ' ', label="Extra label on the legend")


plt.legend()

plt.show()

Вывод