将pandas.datframe.plot()与matplotlib.pyplot.plot()组合的最佳方法是什么?

时间:2019-09-25 01:08:51

标签: python pandas matplotlib plot

我希望在y轴上设置刻度线格式(这个线程Format y axis as percent很不错),但是很多解决方案都导致我的特定代码出现AttributeError

#Example code
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# arbitary data to plot
df = pd.DataFrame(np.random.randn(100,2))

#plotting the data and then plotting a 0 line over the top
ax = df.plot()
ax = plt.plot([0,100],[0,0])

vals = ax.get_yticks()
ax.set_yticklabels(['{:,.2%}'.format(x) for x in vals])

plt.show()

一些测试表明,第二个图调用将ax对象弄乱了,它从原来的类:'matplotlib.axes._subplots.AxesSubplot'变为了'list'类。因此很容易解决,不要将第二个图归因于ax:

ax = df.plot()
plt.plot([0,100],[0,0])

或者在更改ax对象之前在代码中向上移动格式行:

ax = df.plot()
vals = ax.get_yticks()
ax.set_yticklabels(['{:,.2%}'.format(x) for x in vals])
ax = plt.plot([0,100],[0,0])

所以我的问题是:最佳实践是什么?两种解决方法都感觉不正确,将plt.plot()调用分配给ax对象而不更改它的最佳方法是什么?还是最佳实践是使用plt.plot(df.index,df)而不是df.plot()?

*请注意Format y axis as percent中dp8的答案“ plt.gca()。set_yticklabels(['{:。0f}%'。format(x * 100)for plt.gca()。get_yticks() ])“不管我用斧头打电话弄得一团糟

1 个答案:

答案 0 :(得分:1)

当您这样做时,我觉得您很困惑:

ax=df.plot()

您已经制作了斧头对象。如果您想向其中添加更多内容(例如另一幅图),则只需使用其方法即可,例如:

ax.plot([0,100],[0,0])