如何在Matplotlib中设置图像与色条之间的间距?已尝试pad参数但无效果
解决Matplotlib中图像与色条间距无法调整的问题
我看到你尝试用pad参数调整图像和色条的间距但没生效——问题出在你同时使用了divider.append_axes()和fig.colorbar()的pad参数,而且当指定cax=cax时,fig.colorbar()的pad会被忽略,真正控制间距的是divider.append_axes()里的pad参数。
关键原因说明
当你通过make_axes_locatable的divider.append_axes()创建色条的轴(cax)时,色条的位置完全由这个方法的参数控制,fig.colorbar()中的pad参数此时不会产生任何作用。另外要注意,append_axes()的pad参数单位是英寸,而不是相对比例,你设置的pad=2其实是2英寸的间距,在40x30的大图里可能效果不明显,需要调整数值来达到预期。
修改后的代码
from mpl_toolkits.axes_grid1 import make_axes_locatable from matplotlib.colors import LogNorm from matplotlib.ticker import LogLocator from matplotlib import rcParams import numpy as np import matplotlib.pyplot as plt rcParams['font.size']=35 x = np.arange(0,16,1) yx= np.linspace(-50,0,38) mx = np.random.rand(15,38) m2 = np.linspace(0,6,38) fig, ax = plt.subplots(figsize=(40,30)) divider = make_axes_locatable(ax) # 调整这里的pad值控制间距,比如设为3(3英寸),可根据需求增减 cax = divider.append_axes('right', size='5%', pad=3) im = ax.pcolor(x,yx,mx.T,norm=LogNorm(0.1, 100),cmap= 'jet') # 移除这里的pad参数,指定cax后它不会生效 cbar = fig.colorbar(im,cax=cax, orientation='vertical') cbar.ax.yaxis.set_major_locator(LogLocator()) cbar.ax.set_ylabel('Resistividade \u03C1 [ohm.m]', rotation=270) ax2=ax.twiny() ax2.plot(m2,yx,'k--',linewidth=10) ax2.set_xlabel('Resistividade \u03C1 [ohm.m]') ax.set_xlabel('Aquisição') ax.set_ylabel('Profundidade [m]') plt.savefig('mrec_1.png',bbox_inches='tight', format='png', dpi=300) plt.show()
额外建议
- 想要更精细的控制,可以尝试使用小数数值的
pad,比如pad=0.8设置更小间距,或pad=5设置更大间距,根据你的图尺寸灵活调整。 - 不要同时使用
divider.append_axes()和fig.colorbar()的pad参数,避免逻辑混淆。
内容的提问来源于stack exchange,提问作者JCV
相关产品推荐
相关产品推荐

