Pandas双轴绘图中第二个子图仅支持scatter类型的原因排查
问题原因分析:双轴绘图仅scatter类型显示,其他类型不显示
核心原因:两个数据集的时间范围完全不重叠
查看你的数据可以发现:current_speed.csv的时间区间是2022-10-27 13:36到2022-10-27 15:36wind_speed.csv的时间区间是2022-10-27 00:00到2022-10-27 02:00
两者时间完全错开,没有任何交集。
双轴共享x轴范围的特性
用twinx()创建的ax2和ax1共享同一个x轴,x轴的显示范围默认由第一个绘制的图表决定:你先绘制了ax1的line图,x轴范围被自动限定在13:36-15:36之间。不同绘图类型的x轴范围处理差异
- 绘制scatter类型时:Matplotlib会自动检测所有散点的x值,主动扩展x轴范围以包含这些点,所以
wind_speed的点能正常显示在图表上。 - 绘制line/area/bar等类型时:Pandas的plot方法会沿用当前已有的x轴范围,不会自动扩展。而
wind_speed的时间完全在13:36-15:36之外,导致线条绘制在可视区域的左侧,自然无法看到。
- 绘制scatter类型时:Matplotlib会自动检测所有散点的x值,主动扩展x轴范围以包含这些点,所以
验证与修复方法
在代码最后添加手动设置x轴范围的代码,确保覆盖两个数据集的时间区间:
plt.xlim(pd.Timestamp('2022-10-27 00:00'), pd.Timestamp('2022-10-27 16:00')) plt.show()
此时将ax2的kind="scatter"改为kind="line",就能看到wind_speed的线条正常显示了。
你也可以调整数据集的时间让两者有重叠区间,这样无需手动设置x轴范围也能正常显示所有类型的图表。
内容的提问来源于stack exchange,提问作者fred
相关产品推荐
相关产品推荐

