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

Matplotlib中twinx导致pcolormesh绘图colorbar错位问题求助

解决方案

twinx()创建的双Y轴会共享主坐标轴的布局空间,make_axes_locatable仅基于主坐标轴计算得到的cax位置会被双轴布局逻辑覆盖,因此出现colorbar错位。可采用以下两种方案实现需求:

方案1:自动适配布局(推荐)

调用fig.colorbar()时通过ax参数传入主坐标轴和双Y轴对象,matplotlib会自动在两个轴的右侧统一分配空间放置colorbar,代码简洁无需手动计算位置:

import matplotlib.pyplot as plt
import numpy as np

image = np.random.randint(10, size=100).reshape(10, 10)

fig, ax = plt.subplots()
# 创建右侧折线用的双Y轴
ax2 = ax.twinx()
# 分别绘制底图和折线
im = ax.pcolormesh(image)
ax2.plot(image.sum(0), 'r', label='折线数值')
ax2.set_ylabel('折线Y轴标签')

# 关键配置:传入两个轴对象,自动适配右侧空间
cbar = fig.colorbar(im, ax=[ax, ax2], pad=0.1)
cbar.set_label('底图数值标签')

plt.show()

可通过调整pad参数控制colorbar与右侧折线Y轴的间距。

方案2:手动指定colorbar位置

如果需要更精细控制colorbar的宽度、上下边距,可手动调整画布预留空间后自定义cax位置:

import matplotlib.pyplot as plt
import numpy as np

image = np.random.randint(10, size=100).reshape(10, 10)

fig, ax = plt.subplots()
ax2 = ax.twinx()
im = ax.pcolormesh(image)
ax2.plot(image.sum(0), 'r', label='折线数值')
ax2.set_ylabel('折线Y轴标签')

# 调整画布右侧预留足够空间放置colorbar
fig.subplots_adjust(right=0.85)
# 自定义cax位置,参数格式为 [左边界占比, 下边界占比, 宽度占比, 高度占比]
cax = fig.add_axes([0.87, 0.15, 0.03, 0.7])
cbar = fig.colorbar(im, cax=cax)
cbar.set_label('底图数值标签')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 14:48:02