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

Pandas子图布局自定义:分组展示数据并设置不同子图高度(共享X轴)

自定义子图布局解决方案

刚好做过类似的布局调整,我来给你一个简洁的实现方法!要实现你想要的「上方单列子图+下方双列子图、高度不同且共享X轴」的效果,我们可以直接用matplotlib的子图创建工具手动控制布局,而不是依赖pandas默认的subplots=True参数。

完整代码示例

import pandas as pd
import matplotlib.pyplot as plt

# 初始化你的DataFrame
df = pd.DataFrame({'A': range(0,-10,-1), 'B': range(10,20), 'C': range(10,30,2)})

# 创建2行1列的子图,共享X轴,指定高度比例
fig, (ax_top, ax_bottom) = plt.subplots(
    nrows=2, ncols=1,
    sharex=True,
    gridspec_kw={'height_ratios': [1, 2]}  # 比例可按需调整,比如[2,3]就是上2下3的高度占比
)

# 上方子图绘制A列数据
df['A'].plot(ax=ax_top, title='Column A')
# 下方子图同时绘制B和C列数据
df[['B', 'C']].plot(ax=ax_bottom, title='Columns B & C')

# 自动调整布局,避免标题、标签重叠
plt.tight_layout()
plt.show()

关键参数说明

  • sharex=True:强制两个子图共享X轴,缩放、拖动时X轴会同步变化,完全符合你的需求
  • gridspec_kw={'height_ratios': [1, 2]}:这是控制子图高度的核心参数,列表里的数值代表每个子图的高度占比。比如你想让上方子图更高,可以改成[2,1],数值比例可以自由调整
  • ax=ax_top/ax=ax_bottom:通过指定绘图的目标子图对象,把不同的列数据精准放到对应的位置上

额外优化

如果觉得子图之间的间距不合适,可以在plt.tight_layout()之后加上plt.subplots_adjust(hspace=0.2)来手动调整垂直间距,hspace的取值范围是0到1,数值越大间距越宽。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:56:09