在图例折线图中找不到带有标签的句柄
Posted
技术标签:
【中文标题】在图例折线图中找不到带有标签的句柄【英文标题】:No handles with labels found to put in legend linechart 【发布时间】:2021-02-09 19:26:19 【问题描述】:我正在使用 matplotlib 绘制折线图。在所有其他情况下,它通常会自动检测图例,但这次我使用数据透视表来绘制图表,我认为这正在阻止它。结果我不确定如何绘制图例。
No handles with labels found to put in legend.
我的代码如下;
x = t['month'].unique()
y = t.pivot(index='month', columns='T_Name', values='HIR_Won')[t['T_Name'].unique()]
#n = len(t['T_Name'].unique())
ax = plt.axes(label=data.index)
ax.legend()
ax.set_prop_cycle('color',[plt.cm.Greens(i) for i in np.linspace(0, 1, n)])
for i in range(n):
plt.plot(x, y)
添加了标签 arg
#n = len(t['T_Name'].unique())
ax = plt.axes()
ax.set_prop_cycle('color',[plt.cm.Greens(i) for i in np.linspace(0, 1, n)])
for i in range(n):
plt.plot(x, y, label=y.columns)
ax.legend()
【问题讨论】:
你应该在所有的情节之后移动ax.legend
。另外,将label='some_label'
传递给plt.plot(x,y)
。
我认为当我添加标签约束时构建枢轴的方式我没有将单个名称映射到每个图。查看更新后的帖子。
也许你想打电话给plt.plot(x, y, label=y.columns[i])
?
你能清理一下示例代码吗?当您不断地绘制相同的x
和y
时,在i
上循环是没有意义的。此外,图像显示类似label=y.index
,而不是label=y.columns
是的,作为标签,每个循环步骤应该只有一个。只需测试一下,将 y.columns 替换为 i。这个错误都是关于向 plt.plot() 添加标签,这样你就有了 plt.plot(x, y, label=SOME_LABEL_FOR_CURRENT_LOOP_STEP)。
【参考方案1】:
你需要一个
plt.plot(x, y, label=SOME_SINGLE_LABEL_FOR_CURRENT_LOOP_STEP)
能够打电话
plt.legend()
之后。如果不添加标签 arg,则无法调用 plt.legend(),因为它不知道要在图例中打印什么。
在您的情况下,您希望遍历该索引中的所有名称,并使每个名称成为步骤的当前标签。
所以解决方案是显而易见的,几乎就在那里(并且在 cmets 中也有暗示):
ax = plt.axes()
ax.set_prop_cycle('color',[plt.cm.Greens(i) for i in np.linspace(0, 1, n)])
cols = list(y.columns)
for i in range(n):
plt.plot(x, y, label=cols[i])
ax.legend()
至少,我也可以通过添加标签 arg 来消除错误,这很简单,但在 Stack Overflow 上却很难找到。
【讨论】:
以上是关于在图例折线图中找不到带有标签的句柄的主要内容,如果未能解决你的问题,请参考以下文章