我希望在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() ])“不管我用斧头打电话弄得一团糟
答案 0 :(得分:1)
当您这样做时,我觉得您很困惑:
ax=df.plot()
您已经制作了斧头对象。如果您想向其中添加更多内容(例如另一幅图),则只需使用其方法即可,例如:
ax.plot([0,100],[0,0])