【发布时间】:2016-04-29 18:26:53
【问题描述】:
我正在使用matplotlib.gridspec 和tight_layout() 创建复杂的绘图布局。我当前的代码看起来像
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import matplotlib
from matplotlib.ticker import MaxNLocator
fig = plt.figure(figsize=(15,15))
gs1 = gridspec.GridSpec(8, 2)
gs1.update(left=0.05, right=0.95, wspace=0.05, hspace=0.05)
ax1 = plt.subplot(gs1[0:4, 0]) # Original
ax2 = plt.subplot(gs1[0:4, 1]) # Model
ax3 = plt.subplot(gs1[4:8, 0]) # Residual+Sky
ax4 = plt.subplot(gs1[4:7, 1]) # SB profile
ax5 = plt.subplot(gs1[7:8, 1])# SB residuals
# Hide tick labels
plt.setp(ax1.get_yticklabels(), visible=False)
plt.setp(ax1.get_xticklabels(), visible=False)
plt.setp(ax2.get_yticklabels(), visible=False)
plt.setp(ax2.get_xticklabels(), visible=False)
plt.setp(ax3.get_yticklabels(), visible=False)
plt.setp(ax3.get_xticklabels(), visible=False)
plt.setp(ax4.get_xticklabels(), visible=False)
ax4.invert_yaxis()
ax4.set_ylabel(r'Surface Brightness, $\mu$ [mag arcsec$^{-2}$]')
ax5.set_ylabel(r'$\Delta\mu$')
ax5.set_xlabel('Semi-major Axis [arcsec]')
ax5.grid(b=True)
ax4.set_xscale('log')
ax5.set_xscale('log')
gs1.tight_layout(fig)
nbins = len(ax5.get_xticklabels())
ax5.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))
ax4.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))
# Show the plot
plt.show()
生成的布局看起来像
我需要做的是要么
缩小 ax4 和 ax5(右下角的两个子图)之间的垂直空间,或者
使 ax4 和 ax5 共享相同的 x 轴,使得子图之间的空间为零
我真的很喜欢 gridspec 和 tight_layout() 格式化绘图的方式,但是我不知道如何“强制”各个子绘图之间的间距。有没有一种简单的方法可以同时使用matplotlib.gridspec 和tight_layout()?
【问题讨论】:
标签: python matplotlib