Matplotlib 图例的标题

我知道给一个传奇人物起一个标题似乎有点多余,但是使用 matplotlib 有可能吗?

下面是我的代码片段:

import matplotlib.patches as mpatches
import matplotlib.pyplot as plt


one = mpatches.Patch(facecolor='#f3f300', label='label1', linewidth = 0.5, edgecolor = 'black')
two = mpatches.Patch(facecolor='#ff9700', label = 'label2', linewidth = 0.5, edgecolor = 'black')
three = mpatches.Patch(facecolor='#ff0000', label = 'label3', linewidth = 0.5, edgecolor = 'black')


legend = plt.legend(handles=[one, two, three], loc = 4, fontsize = 'small', fancybox = True)


frame = legend.get_frame() #sets up for color, edge, and transparency
frame.set_facecolor('#b4aeae') #color of legend
frame.set_edgecolor('black') #edge color of legend
frame.set_alpha(1) #deals with transparency
plt.show()

我想要标签1上面的图例的标题。作为参考,下面是输出: Showing legend

132627 次浏览

Add the title parameter to the this line:

legend = plt.legend(handles=[one, two, three], title="title",
loc=4, fontsize='small', fancybox=True)

See also the official docs for the legend constructor.

Just to add to the accepted answer that this also works with an Axes object.

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4], label='some_label') # Or however the Axes was created.
ax.legend(title='This is My Legend Title')

In case you have an already created legend, you can modify its title with set_title(). For the first answer:

legend = plt.legend(handles=[one, two, three], loc=4, fontsize='small', fancybox=True)
legend.set_title("title")
# plt.gca().get_legend().set_title() if you didn't store the
# legend in an object or you're loading a saved figure.

For the second answer based on Axes:

fig, ax = plt.subplots()
ax.plot([0, 1, 2], [0, 1, 4], label='some_label') # Or however the Axes was created.
ax.legend()
ax.get_legend().set_title("title")