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

Matplotlib使用subplots绘制首个子图偏移与Pandas plot结果不一致问题

问题原因说明

偏移产生的核心原因

  • 布局调整机制差异:pandas的plot()方法内部默认会执行布局自动优化,确保所有绘图元素对齐。而手动调用plt.subplots()后没有主动触发布局调整,在sharex=True模式下,默认仅最底部的子图显示x轴刻度标签,上方3个子图的x轴刻度默认隐藏,节省出来的底部空间没有被自动重新分配,加上每个子图都单独添加了图例,进一步挤压了绘图区域,最终导致第一个子图和下方三个子图位置出现视觉偏移。
  • 默认边距设置差异:matplotlib创建子图时,默认会给整幅图的顶部预留更多边距,第一个子图上方没有其他子图挤压,而下方子图之间的默认间距更小,叠加图例占用的空间后,第一个子图的偏移会更明显。

两种结果的选择标准

两种绘图结果本身都是正确的,不存在绝对的“标准答案”,根据使用场景选择即可:

  • 如果需要将每列数据放在独立坐标轴上单独观察趋势,就用plt.subplots()的方案,只要在plt.show()之前添加fig.tight_layout()即可解决偏移问题,调整后代码如下:
import matplotlib.pyplot as plt
import pandas as pd

data = pd.read_csv("data.csv", sep="\t")

fig, axes = plt.subplots(4, 1, sharex=True)
for i, c in enumerate(data.columns):
    axes[i].plot(data[c], label=f"{c}")
    axes[i].legend()

fig.tight_layout() # 新增布局调整代码
plt.show()
  • 如果需要将所有列放在同一坐标轴上直接对比数值差异,直接用pd.DataFrame.plot()的默认方案即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:45:07