Pandas绘制子图x轴设为hh:mm:ss格式报错AttributeError求解决
解决Pandas子图创建时的AttributeError问题
这个坑我之前踩过!你遇到的AttributeError: 'numpy.ndarray' object has no attribute 'set_xticks',核心原因是你对plot方法返回的ax对象结构理解错了。
当你设置subplots=True同时指定layout=(2,1)时,Pandas返回的不是一维的子图列表,而是一个二维NumPy数组(形状为(2,1))。你直接用ax[0]取到的是数组里的一整行(仍然是一个数组),而不是单个的坐标轴对象,这自然就没有set_xticks这类方法了。
给你两种简单的解决办法:
方法一:使用二维索引访问子图
直接针对二维数组的结构来索引每个子图,把ax[0]改成ax[0,0],ax[1]改成ax[1,0]即可:
ax = df[df.columns[6:8]].plot(figsize=(7,5), grid = True, legend = True, subplots=True, layout = (2,1), sharex = False) # 用二维索引定位每个子图 ax[0,0].set_xticks(df.index[::60].flatten()) ax[0,0].set_xticklabels(df.Time[::60], rotation=90) ax[1,0].set_xticks(df.index[::60].flatten()) ax[1,0].set_xticklabels(df.Time[::60], rotation=90) plt.show()
方法二:先将数组展平为一维
如果习惯用一维索引,可以先把二维数组展平,之后就像你原来的写法一样用ax[0]、ax[1]访问:
ax = df[df.columns[6:8]].plot(figsize=(7,5), grid = True, legend = True, subplots=True, layout = (2,1), sharex = False) # 把二维数组展平成一维 ax = ax.flatten() ax[0].set_xticks(df.index[::60].flatten()) ax[0].set_xticklabels(df.Time[::60], rotation=90) ax[1].set_xticks(df.index[::60].flatten()) ax[1].set_xticklabels(df.Time[::60], rotation=90) plt.show()
小提示:如果你的布局是横向的(1,2),同样的逻辑,ax会是(1,2)的二维数组,用上述两种方法处理都能解决问题。
内容的提问来源于stack exchange,提问作者Lazerhorse
相关产品推荐
相关产品推荐

