You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:52:33