如何缩小Matplotlib子图与colorbar之间的间距?
解决Matplotlib中子图与Colorbar间距过大的问题
方法一:使用make_axes_locatable(推荐)
这个工具能让Colorbar与子图高度自动匹配,同时通过pad参数精准控制间距,是最常用的解决方案。
示例代码:
import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1 import make_axes_locatable import numpy as np # 创建子图 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4)) # 生成示例数据 data1 = np.random.rand(10, 10) data2 = np.random.rand(10, 10) im1 = ax1.imshow(data1) im2 = ax2.imshow(data2) # 为第一个子图创建Colorbar容器 divider1 = make_axes_locatable(ax1) # size控制Colorbar宽度,pad控制子图与Colorbar的间距(数值越小间距越小) cax1 = divider1.append_axes("right", size="5%", pad=0.1) fig.colorbar(im1, cax=cax1) # 为第二个子图创建Colorbar容器 divider2 = make_axes_locatable(ax2) cax2 = divider2.append_axes("right", size="5%", pad=0.1) fig.colorbar(im2, cax=cax2) plt.show()
方法二:直接调整Colorbar的pad与shrink参数
调用fig.colorbar()时,通过pad控制子图与Colorbar的间距,shrink让Colorbar高度适配子图,避免出现错位。
示例代码:
import matplotlib.pyplot as plt import numpy as np fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(8, 4)) data1 = np.random.rand(10, 10) data2 = np.random.rand(10, 10) im1 = ax1.imshow(data1) im2 = ax2.imshow(data2) # pad:子图与Colorbar的间距,shrink:缩放Colorbar高度以匹配子图 cbar1 = fig.colorbar(im1, ax=ax1, shrink=0.8, pad=0.02) cbar2 = fig.colorbar(im2, ax=ax2, shrink=0.8, pad=0.02) # 同时调整子图之间的间距 plt.subplots_adjust(wspace=0.2) plt.show()
方法三:使用GridSpec精确布局
通过GridSpec将Colorbar作为独立的网格单元,统一控制所有元素的宽度比例和间距,适合复杂布局场景。
示例代码:
import matplotlib.pyplot as plt import matplotlib.gridspec as gridspec import numpy as np fig = plt.figure(figsize=(8, 4)) # 1行4列网格,前两列是子图,后两列是Colorbar,宽度比例4:4:1:1;wspace控制所有列间距 gs = gridspec.GridSpec(1, 4, width_ratios=[4, 4, 1, 1], wspace=0.1) ax1 = fig.add_subplot(gs[0]) ax2 = fig.add_subplot(gs[1]) cax1 = fig.add_subplot(gs[2]) cax2 = fig.add_subplot(gs[3]) data1 = np.random.rand(10, 10) data2 = np.random.rand(10, 10) im1 = ax1.imshow(data1) im2 = ax2.imshow(data2) fig.colorbar(im1, cax=cax1) fig.colorbar(im2, cax=cax2) plt.show()
内容的提问来源于stack exchange,提问作者AlexLee
相关产品推荐
相关产品推荐

