【发布时间】:2017-12-08 21:31:54
【问题描述】:
我正在用 pandas 打印各种东西,使用内置的 plot 命令,例如在 ipython 中 my_dataframe.plot() 后跟 plt.show()。
现在这是一种非常简单方便的可视化方式,而且考虑到我还是对 SVG 文件进行后处理,我不太关心情节的细节。
但是,我需要一个标题、一个图例和绘图上 x 和 y 轴的标签,既可以提醒自己什么是什么,也可以快速将一些东西发送给其他人,而无需添加“哦,顺便说一句,x 轴这次是小时,y 一如既往地是米,但现在蓝色是样本 B……”电子邮件中的一行。
我想出了如何以一种简单的方式做到这一点(见下文),我也知道我可以用ax 做的各种强大的事情,但我花了一段时间才达到我的“简单”解决方案,我远离ax,因为发生了太多我不需要也不理解的事情。
我确实理解为什么人们想要ax 的所有强大选项,但我不明白为什么熊猫绘图功能中不包含这样一个简单的选项。而且似乎我不是唯一一个。例如,用户 Chrispy 发布了这条高度评价的评论:
x 和 y 标签不能作为参数添加到
pd.plot()有什么特殊原因吗?考虑到pd.plot()比plt.plot()更加简洁,看起来更简洁而不是调用ax.set_ylabel()似乎是有意义的
关于this question 的答案,但没有进一步的 cmets。因此,我公然窃取这个问题。
为什么plt.plot()默认包含图例,也很容易让我添加标题(my_df.plot(title = 'check out my cool plot')),但合乎逻辑的下一步(my_df.plot(ylabel = 'size in meters'))会导致TypeError: There is no Line2D property "ylabel"?
是我遗漏了什么还是有这个疏忽的原因?
示例代码:
当我在我的真实文件中实现它并在 ipython 中使用run workflow.py 运行它时,这可以工作,但是在复制粘贴代码时我无法重现它。我的标签要么被忽略,要么彻底失败:
编辑:
最初我在这里的示例中有plt.xlabel = 'time in seconds',但它不起作用,但我在实际代码中使用了正确的plt.xlabel('time in seconds'),这当然起作用了。
times = np.arange(0,43200,60)
my_df = pd.DataFrame(np.random.randn(len(times)), index = times)
my_df.plot(title = 'just some random data') #this works
#my_df.plot(title = 'just some random data', ylabel = 'size in meters', xlabel = 'time in seconds') #this seems like the logical next step, but it errors
plt.ylabel('size in meters')
plt.xlabel('time in seconds')
这似乎是axes 最简单/最小的解决方案,使用@Johannes 解决方案,但我认为这(参见 cmets 的答案)也是一个很好的说明,为什么我不想用 @ 来打扰自己987654341@:
axes = my_df.plot(title = 'just some random data')
axes.set_ylabel('size in meters')
axes.set_xlabel('time in seconds')
另外,我可以用另一种方式设置标题,但标签只有一个选项,这让我感到困惑:
axes = my_df.plot()
axes.set_title('just some random data')
axes.set_ylabel('size in meters')
axes.set_xlabel('time in seconds')
【问题讨论】:
标签: python pandas matplotlib plot