使用subplot_mosaic与make_axes_locatable时Matplotlib色条及保存比例问题
问题解决方案
1. 修复Colorbar刻度与标题不显示的问题
constrained_layout=True 和 make_axes_locatable 混用会导致新添加的colorbar轴(cax)未被布局系统正确识别,进而被挤出画布。可以通过以下调整解决:
- 在创建colorbar时,明确关联当前figure而非使用全局
plt.colorbar - 触发一次画布重绘,让布局系统重新计算所有轴的位置
修改后的plot2d函数:
def plot2d(data, ax, fig): im = ax.imshow(data, aspect="auto") divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.05) # 关联当前figure创建colorbar,避免全局上下文冲突 fig.colorbar(im, cax=cax, label="DATA") # 强制更新布局,让constrained_layout识别新添加的colorbar轴 fig.canvas.draw()
2. 保存时保留5:7的纵横比
bbox_inches="tight" 会自动裁剪空白并调整图像尺寸,破坏原本设置的5x7英寸比例。直接移除该参数即可严格保留设定的纵横比;如果需要减少空白,可以调整constrained_layout_pad参数控制布局内边距。
完整修改代码
import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.axes_grid1.axes_divider import make_axes_locatable def plot2d(data, ax, fig): im = ax.imshow(data, aspect="auto") divider = make_axes_locatable(ax) cax = divider.append_axes("right", size="5%", pad=0.05) fig.colorbar(im, cax=cax, label="DATA") fig.canvas.draw() fig = plt.figure(constrained_layout=True) fig.set_size_inches(5, 7) ax_dict = fig.subplot_mosaic([["D1"]]) ax = ax_dict["D1"] plot2d(np.random.rand(10, 1000), ax, fig) # 移除bbox_inches="tight"以保留设定的纵横比 plt.savefig("foo3.pdf", dpi=100) plt.show()
内容的提问来源于stack exchange,提问作者Mo0nKizz
相关产品推荐
相关产品推荐

