matplotlib 直接从pandas打印时,是否有方法抑制图例输入?

mlmc2os5  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(83)

我需要在Matplotlib轴ax上执行多个绘图操作。数据在pandas DataFrame中,因此很自然地使用多个绘图命令:

df.plot(..., ax=ax)

字符串
但对于其中的一些,我不希望在图例中有标签条目。我尝试添加label="_nolegend_",但不起作用。
我发现的唯一解决方法是首先从DataFrame中提取数据,然后使用单独的ax.plot命令在循环中绘制它们,在图例中我想要的地方添加label参数。这是乏味的。
注意:我不是在问如何完全删除图例。
编辑:在@Vitalizzare发布了他的好答案之后(谢谢!):当然,我试过了,因为它在文档中,但它不工作在我的情况下。不容易理解为什么,但我认为这与绘制的曲线数量有关。请考虑以下代码:

dg = pd.DataFrame(data=np.random.rand(400).reshape(10,40))
fig1, ax = plt.subplots(figsize=(12, 4))
dg.iloc[1:8].plot(ax=ax,style='.-',color='lightgray',legend=False)
dg[[32,33]].iloc[1:8].plot(ax=ax)


这里发生了一些非常奇怪的事情。我得到不一致的结果!有时候我会得到一个没有传奇的人物。我不知道为什么。我运行的是mpl 3.5.1和pandas 1.4.2。在我的原始笔记本中,我无法获得正确的行为。

8qgya5xd

8qgya5xd1#

为了避免绘制图例,我们可以将legend=False作为参数传递给df.plot。要将图例限制为前N个标签,我们可以运行ax.legend(list_of_labels_to_show)。为了显示任意一组标签,我们可以在相同的轴上分两步分别绘制数据,其中legend=False在不应该显示的轴上。
范例:

df = pd.DataFrame({
    'x': [1,2],
    'y': [2,1],
    'z': [1.5,1.5]
})

fig, (ax1, ax2, ax3, ax4) = plt.subplots(1, 4, subplot_kw={'aspect':'equal'}, figsize=(12, 3))

fig.suptitle('Plotting data with')

ax1.set_title('full legend')
df.plot(ax=ax1)

ax2.set_title('first n legend')
df.plot(ax=ax2)
ax2.legend(df.columns[:2])

ax3.set_title('selected legend')
df[['x','z']].plot(ax=ax3)
df['y'].plot(ax=ax3, legend=False)

ax4.set_title('no legend')
df.plot(ax=ax4, legend=False)

fig.savefig('legend_example.png')

字符串
输出量:


的数据

相关问题