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

如何让单列子图中的折线图与热力图左右轴脊对齐

如何让单列子图中的折线图与热力图左右轴脊对齐

我来帮你解决这个对齐问题!首先得理清你代码里的两个关键问题,再一步步调整布局:

问题1:热力图覆盖了原有的子图轴

你现在写的 ax2 = sns.heatmap(...) 会重新创建一个新的轴对象,把一开始通过 subplots 创建的 ax2 给覆盖了,这直接打破了两个子图的布局关联,自然没法对齐。所以第一步要修正这个:绘制热力图时指定使用已有的ax2轴,代码改成这样:

sns.heatmap(ddf, linewidth=1, cmap='Blues', annot=True, robust=True, fmt='d', ax=ax2)

问题2:用width_ratios报错的原因

你设置的是2行1列的子图布局(subplots(2, ...) 里第一个参数是行数,默认列数为1),width_ratios 的长度必须和列数保持一致(也就是只能传一个值),传[2,1]自然会报错,因为列数不匹配。


解决方案:共享x轴实现完美对齐

最直接的方法是让两个子图共享x轴,这样它们的左右边界会自动对齐,而且x轴范围完全一致。具体操作分两步:

  1. 创建子图时开启共享x轴:
fig, (ax1, ax2) = plt.subplots(2, figsize=(25,10), gridspec_kw={'height_ratios': [1, 3]}, sharex=True)
  1. 保持你原来的折线图x轴隐藏逻辑:
ax1.axes.get_xaxis().set_ticks([])

这样设置后,折线图的x轴范围会和热力图完全匹配,左右边脊自然就对齐了,观众能直观对应每个月份的汽油价格和地铁客流量的关系。

额外适配:如果折线图是每日数据

如果你的eu_gas是2022年的每日汽油价格数据,那可以把日期转换成对应月份的序号(1月=0,12月=11),让折线图的x轴和热力图的x轴刻度一一对应:

# 提取日期对应的月份序号(减去1是为了和热力图x轴的0-11范围匹配)
x_months = eu_gas.index.month - 1
ax1.plot(x_months, eu_gas['Unleaded Gasoline 95'])

最后别忘了加上plt.tight_layout()来优化子图间距,让整体布局更美观~

备注:内容来源于stack exchange,提问作者milikest

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 09:42:57