使用Matplotlib的GridSpec消除子图空白并调整右侧色条位置
Matplotlib双生子图布局优化方案
针对你遇到的两个布局问题,修改后的代码如下,同时附上关键调整说明:
import numpy as np import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec data1 = np.random.rand(10,10) data2 = np.random.rand(10,10) fig = plt.figure(constrained_layout=True) # 定义2行2列网格,第二列窄幅用于放置色条 gs = GridSpec(2, 2, figure=fig, width_ratios=[1, 0.05]) # 第一个子图占据第一行全部列,填满横向空间 ax1 = fig.add_subplot(gs[0, :]) img1 = ax1.imshow(data1, aspect='auto') # 绑定底部色条到第一个子图,缩小边距 fig.colorbar(img1, ax=ax1, location='bottom', pad=0.05) # 第二个子图占据第二行第一列 ax2 = fig.add_subplot(gs[1, 0]) img2 = ax2.imshow(data2, aspect='equal') # 替代plt.axis("scaled"),效果一致 # 色条放在第二行第二列,与子图紧密相邻 fig.colorbar(img2, cax=fig.add_subplot(gs[1, 1])) plt.show()
关键调整说明
- 解决第一个子图右侧空白:将第一个子图的网格范围设为
gs[0, :],让它占据第一行的所有列,从而填满整个图形的横向空间,不再留空白。 - 让第二个子图色条紧邻:通过
width_ratios设置第二列的窄幅宽度,专门用于放置色条;使用cax参数指定色条的轴位置,确保它和子图紧密贴合,不会出现多余间距。
内容的提问来源于stack exchange,提问作者Mo0nKizz
相关产品推荐
相关产品推荐

