同DataFrame多段不同xlim数据如何对齐x=0后绘制在同一图对比
解决方案
你原来的代码每次调用M3.plot()都会默认创建新的画布和子图,所以会生成三个独立的绘图。要实现同图对比+X轴对齐到0的需求,按以下步骤修改即可:
核心思路
- 提前创建唯一的绘图轴对象,所有数据都绘制到该轴上
- 对每个数据分段重置索引生成从0开始的相对X轴,自动实现对齐,Y值无需额外偏移
实现代码
import matplotlib.pyplot as plt # 提前创建统一的绘图轴对象 fig, ax = plt.subplots(figsize=(10, 6)) # 处理第一个区间[a,b],重置索引得到从0开始的x轴 seg1 = M3.loc[a:b, "Wirkleistung [W]"].reset_index(drop=True) seg1.plot(ax=ax, label=f"区间[{a},{b}]") # 处理第二个区间[c,d] seg2 = M3.loc[c:d, "Wirkleistung [W]"].reset_index(drop=True) seg2.plot(ax=ax, label=f"区间[{c},{d}]") # 处理第三个区间[e,f] seg3 = M3.loc[e:f, "Wirkleistung [W]"].reset_index(drop=True) seg3.plot(ax=ax, label=f"区间[{e},{f}]") # 配置绘图显示 ax.legend() ax.set_xlabel("相对位置(对齐到片段起始点)") ax.set_ylabel("Wirkleistung [W]") plt.show()
补充说明
如果你的DataFrame索引是时间序列,想要保留相对时间间隔而非用整数索引,可以手动计算相对秒数作为x轴:
# 以时间序列索引为例 seg1 = M3.loc[a:b, "Wirkleistung [W]"] seg1_x = (seg1.index - seg1.index[0]).total_seconds() ax.plot(seg1_x, seg1.values, label=f"区间[{a},{b}]")
内容的提问来源于stack exchange,提问作者Sabet
相关产品推荐
相关产品推荐

