Pyplot - 标签绘图

2 投票
2 回答
10767 浏览
提问于 2025-04-17 04:56

我在用pyplot给数据加标签的时候遇到了麻烦。

我现在是这样画图的:plt.plot(data)。

这里的data是一个数组,其中有一列是总成本,还有其他列是子成本。

我想加一个图例,并给每个数据列表适当地标注名称。但是我似乎无法让图例正常工作。比如我试过plt.legend(('Column 1','Column 2','etc.) , loc =1),但没有效果。如果我单独画每一列,图例又会出问题。

我期待着大家的建议,谢谢!

编辑:

for i in range(1,days):
    data.append(totalCost(i)) #cost returns retVal, construction, gas, and wage
plt.ylabel('Cost in US Dollars') 
plt.title('Economic Cost over Time')

plt.plot(data)
plt.legend(('Total','Construction','Gas','Wage'),loc=1) # Legend is blank

编辑2:为了不让代码分散在程序的不同地方,我把它们重新整理了一下,集中到一起。这样一来,图例就开始正常工作了,所有问题似乎都解决了。不过我还是不知道之前的问题出在哪里。

plt.plot(data)
plt.legend(('Total Cost', 'Construction Cost', 'Gas Cost','Wage Cost'),loc=0)
plt.grid(False)
plt.xlabel('Time (Days)')
plt.ylabel('Cost in US Dollars')
plt.title('Economic Cost over Time')
print ('   Close the Graph to Continue Using this Model')
plt.show()

2 个回答

0

你可以不直接在plt.legend()里写标题,而是先创建一个标题的列表,然后把这个列表传给你的图表。比如,你可以这样做:

legends = ['总成本', '建筑成本', '燃气成本', '工资成本'] plt.plot(data, labels=legends) plt.legend()
2

你的代码可以在Mac OS X上正确显示图例,前提是:

  • 在开始时将Matplotlib设置为交互模式:plt.ion()
  • 代码最后要加上plt.show(),比如这样。

升级Matplotlib版本也可能会有帮助。

最后一个可能的解决办法是,确实可以单独绘制每条线,并给它们各自加上标签:plt.plot(<单条线的数据>, label='Construction'),然后用plt.legend(loc='best')来绘制图例。

撰写回答