python - 将 pandas.dataframe.plot() 与 matplotlib.pyplot.plot() 结合的最佳方法是什么?

标签 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()?

*注意 dp8 在 Format y axis as percent 中的回答“plt.gca().set_yticklabels(['{:.0f}%'.format(x*100) for x in plt.gca().get_yticks()])”不管我调用的困惑如何,它都有效斧头

最佳答案

我认为你混淆了,当你这样做时:

ax=df.plot()

你已经制作了斧头对象。如果您想添加更多内容(如另一个图),您可以简单地使用它的方法来执行此操作,例如:

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

关于python - 将 pandas.dataframe.plot() 与 matplotlib.pyplot.plot() 结合的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58089867/

相关文章:

python - 如何将数组转换为数据框?

python - 使用 dict_keys 将字典列表转换为 CSV 字符串

python - 子目录中无法访问Numpy

pandas - 如何根据 Pandas 的值划分 Pandas 列?

python - 使用 pymnet 固定多路网络图中节点的位置

python - 如何使用 pandas 从 csv 读取多行到单个数据帧行

python - 对 pandas 数据框列进行二值化

python:将数据框更新到现有的Excel工作表而不覆盖同一张纸和其他工作表上的内容

python - 拉普拉斯语的opencv失败并显示cv2。错误:OpenCV(4.1.2)

python - 将自定义文本绘制为 xlabel