是否可以在 matplotlib 中添加一个字符串作为图例项
Posted
技术标签:
【中文标题】是否可以在 matplotlib 中添加一个字符串作为图例项【英文标题】:Is it possible to add a string as a legend item in matplotlib 【发布时间】:2013-05-25 11:17:14 【问题描述】:我正在 matplotlib 中制作一些图,并想为一些数据添加解释性文本。我想在我的图例中有一个字符串作为“0-10”项上方的单独图例项。有谁知道是否有可能的方法来做到这一点?
这是我传奇的代码:ax.legend(['0-10','10-100','100-500','500+'],loc='best')
【问题讨论】:
如果没有正确的方法来做到这一点,我能想到的唯一其他选择是通过绘制一些空值来欺骗图表来生成它 试试annotate()
函数。我刚刚问了类似的问题:***.com/questions/16823703/adding-label-to-contour
为什么不简单地设置图例title
? IE。 ax.legend(['0-10','10-100','100-500','500+'], loc='best', title='Explanatory text')
.
【参考方案1】:
替代解决方案,有点脏但很快。
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()
【讨论】:
聪明的解决方案。我比另一个更喜欢这个。荣誉 不敢相信这么多其他线程给出了令人费解的解决方案而错过了这个简单的解决方案!!!也许 matplotlib 不是那么直观?是这样吗?【参考方案2】:当然。 ax.legend()
有两个参数形式,接受对象列表(句柄)和字符串列表(标签)。为您的额外字符串使用虚拟对象(又名"proxy artist")。我选择了一个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()
【讨论】:
谢谢,这行得通。我还想使用在条形顶部绘制一条线的不同绘图来执行此操作,但我收到以下错误 c:\Python27\lib\site-packages\matplotlib\legend.py:628: UserWarning:图例不支持 [line = ax.plot(x, y)
。问题是 plot
返回一个 list 行,所以你需要找到真正的艺术家。您可以使用line = ax.plot(x, y)[0]
或使用参数解包的line, = ax.plot(x, y)
。以上是关于是否可以在 matplotlib 中添加一个字符串作为图例项的主要内容,如果未能解决你的问题,请参考以下文章
GeoViews:使用 matplotlib 后端添加平铺底图