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

为何plt.plot与df.plot代码顺序调换后生成图表不一致?

为何调用顺序相反的Matplotlib代码生成的图表不同?

我的df.index为datetime对象,Y_FIT['BFGS']是数组。为何以下两段仅调用顺序相反的代码生成的图表不同?

CODE 1

plt.plot(df.index, Y_FIT['BFGS'])
df.Column1.plot()

对应图表:CODE1生成的图表

CODE 2

df.Column1.plot()
plt.plot(df.index, Y_FIT['BFGS']);

对应图表:CODE2生成的图表


原因解析

核心差异来自pandas绘图方法与matplotlib原生绘图的坐标轴初始化逻辑不同:

  • 在CODE1中,先调用plt.plot()会让matplotlib自动创建基于传入datetime索引的默认坐标轴,其时间范围、刻度规则由matplotlib原生逻辑生成。后续调用df.Column1.plot()时会复用这个已存在的坐标轴,但pandas对datetime轴的适配逻辑和matplotlib原生不兼容,导致第二段曲线的显示范围、刻度与第一段错位,最终呈现出两张图的效果。
  • 在CODE2中,先调用df.Column1.plot()时,pandas会创建一个适配自身DataFrame datetime索引的坐标轴(更贴合数据的时间范围和刻度)。后续调用plt.plot()时会复用这个由pandas初始化好的坐标轴,两段曲线能正确对齐到同一个时间轴上,因此呈现出正常叠加的效果。

简单总结:谁先创建坐标轴,后续绘图就会复用该坐标轴,而pandas与matplotlib对datetime轴的初始化逻辑存在差异,最终导致图表表现不同。


内容的提问来源于stack exchange,提问作者Artashes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 22:02:34