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
相关产品推荐
相关产品推荐

