使用Matplotlib子图绘制Pandas DataFrame多列数据报错求助
解决Pandas子图绘制报错'AxesSubplot object is not subscriptable'
错误原因
plt.subplots(1,1)创建的是单个Axes对象,并非可通过下标访问的数组,因此使用axis[0,0]会触发下标访问错误。你需要的是1行2列的子图布局,应改为plt.subplots(1,2)。- 调用
df.plot()时,需通过ax参数指定目标子图,而非axis[0,0].df.plot()这种错误写法。 figsize参数应放在plt.subplots()中统一设置,避免重复设置导致布局混乱。
修正后的代码
import pandas as pd import matplotlib.pyplot as plt df = pd.read_csv('D:\\data_ana\\file_r.csv') # 创建1行2列的子图,设置整体画布大小 figure, axis = plt.subplots(1, 2, figsize=(10, 5)) # 在第一个子图绘制K_DistX、K_DistY与Age的折线图 df.plot(x="Age", y=["K_DistX","K_DistY"], kind="line", ax=axis[0]) axis[0].set_title('K_DistX & K_DistY vs Age') # 在第二个子图绘制K_VabsX、K_VabsY与Age的折线图 df.plot(x="Age", y=["K_VabsX","K_VabsY"], kind="line", ax=axis[1]) axis[1].set_title('K_VabsX & K_VabsY vs Age') # 自动调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键修正说明
- 用
plt.subplots(1,2)替代plt.subplots(1,1),生成1行2列的子图数组axis,此时axis[0]对应第一个子图,axis[1]对应第二个子图。 - 通过
df.plot(..., ax=axis[0])明确指定绘图的目标子图,这是Pandas绘图与Matplotlib子图结合的标准写法。 - 添加
plt.tight_layout()自动优化子图布局,防止坐标轴标签、标题出现重叠。
内容的提问来源于stack exchange,提问作者Praveen Rai
相关产品推荐
相关产品推荐

