Vraag Is het mogelijk om een ​​string toe te voegen als een legenda-item in matplotlib


Ik produceer enkele plots in matplotlib en wil een verklarende tekst toevoegen voor sommige gegevens. Ik wil een tekenreeks in mijn legenda hebben als een apart legenda-item boven het item '0-10'. Weet iemand of er een mogelijke manier is om dit te doen?

enter image description here

Dit is de code voor mijn legende:
ax.legend(['0-10','10-100','100-500','500+'],loc='best')


24
2018-05-30 01:51


oorsprong


antwoorden:


Zeker. ax.legend() heeft een argument met twee argumenten dat een lijst met objecten (handles) en een lijst met strings (labels) accepteert. Gebruik een dummy-voorwerp (ook bekend als a "proxy artiest") voor je extra string. Ik koos een matplotlib.patches.Rectangle zonder vulling en 0 hieronder, maar je zou elke ondersteunde artiest kunnen gebruiken.

Stel dat u bijvoorbeeld 4 bar-objecten hebt (aangezien u de code die werd gebruikt om de grafiek te genereren niet hebt geplaatst, kan ik deze niet exact reproduceren).

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


30
2018-05-30 03:00



Alternatieve oplossing, een beetje vies, maar redelijk snel.

import pylab as plt

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

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


plt.legend()

plt.show()

enter image description here


17
2017-07-20 16:39