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

Pandas Series.plot()绘制非连续段堆叠而非衔接的问题

问题解答

这不是bug,是pandas版本迭代后的默认行为变化。

原因说明

你学习的Coursera课程使用的是2018-2019年的pandas版本(大概率是0.x系列),当时连续调用Series.plot()时,默认会在同一个绘图轴(Axes)上叠加绘制,所以两段时间区间的股价数据会自动分配不同颜色,形成连续的分段折线。

而pandas 1.5.2属于1.x系列版本,从1.x开始,plot()的默认行为调整为每次调用都会创建新的绘图轴。你两次调用plot()相当于生成了两个独立的画布,最终显示时两个画布重叠,就出现了数据堆叠、x轴标签重复的问题。

解决方法

方法1:指定同一个绘图轴

手动获取或创建一个Axes对象,在每次调用plot()时通过ax参数传入,强制在同一个画布上绘图:

import pandas as pd
import matplotlib.pyplot as plt

# 注意路径前加r避免转义字符问题
fb = pd.read_csv(r"C:\Users\me\Downloads\META.csv", index_col='Date')
# 获取当前绘图轴
ax = plt.gca()
# 两段数据都在同一个轴上绘制
fb.loc['2022-01-10':'2022-06-01', 'Close'].plot(ax=ax)
fb.loc['2022-06-02':, 'Close'].plot(ax=ax)
# 显示图像
plt.show()

方法2:合并分段数据后统一绘图

将两段数据合并为一个DataFrame,通过一次plot()完成绘制,pandas会自动为不同列分配颜色:

import pandas as pd

fb = pd.read_csv(r"C:\Users\me\Downloads\META.csv", index_col='Date')
# 为两段数据重命名,方便区分
segment1 = fb.loc['2022-01-10':'2022-06-01', 'Close'].rename('2022年初-年中')
segment2 = fb.loc['2022-06-02':, 'Close'].rename('2022年中之后')
# 合并后绘图
pd.concat([segment1, segment2], axis=1).plot()

补充说明

pandas 1.x调整plot()默认行为,是为了让单次绘图更独立,避免因多次调用意外污染同一个画布。这属于版本更新的特性,而非bug。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 03:35:27