我想画一个大的总览图。为此,我使用plt.imshow
绘制不同密度的矩阵。问题是颜色条不想和我一起工作。如图所示。现在我有两个问题
我当前的代码是(为了测试,您可以将eval(data)
更改为随机矩阵):
a = 5
b = 4
fig, axs = plt.subplots(a, b , figsize=(8.27, 11.69), tight_layout=True, sharey=True, sharex=True, gridspec_kw = {'wspace':0, 'hspace':0})
data = ['map_sm_', 'map_dens_']
gasf = ['fg10', 'fg20', 'fg30', 'fg50', 'fg70']
dire = ['x', 'z', 'x', 'z']
cm = ['hot', 'viridis']
for col in range(b):
for row in range(a):
ax = axs[row, col]
if col ==0:
ax.set_ylabel('x (kpc)', fontsize=13)
if col<2:
if col == 0:
data = 'map_sm_' + gasf[row] + dire[col]
else:
data = 'map_sm_' + gasf[row] + dire[col]
pcm = ax.imshow(eval(data), norm=mpl.colors.LogNorm(), cmap=cm[0], interpolation='none', extent=[-17.5,17.5,-17.5,17.5])
else:
if col == 2:
data = 'map_dens_' + gasf[row] + dire[col]
else:
data = 'map_dens_' + gasf[row] + dire[col]
pcm2 = ax.imshow(eval(data), norm=mpl.colors.LogNorm(), cmap=cm[2], interpolation='none', extent=[-17.5,17.5,-17.5,17.5])
if row ==4:
if col == 0:
ax.set_xlabel('z (kpc)', fontsize=13)
if col == 1:
ax.set_xlabel('y (kpc)', fontsize=13)
if col == 2:
ax.set_xlabel('z (kpc)', fontsize=13)
if col == 3:
ax.set_xlabel('y (kpc)', fontsize=13)
cb1 = fig.colorbar(pcm, ax=axs[0, :2], location='top', pad=-1.2)
cb2 = fig.colorbar(pcm2, ax=axs[0, 2:4], location='top', pad=- 1.2)
cb1.mappable.set_clim(1E2,1E9)
cb2.mappable.set_clim(1E-5,1E0)
plt.show()
不要在颜色栏上设置颜色限制。把它们放在对数标准上
紧凑的布局无法满足您对色条的需求。请使用受约束的_布局(https://matplotlib.org/stable/tutorials/intermediate/constrainedlayout_guide.html)。虽然这可能不是您想要的,因为您有固定的纵横轴,所以不容易使两个方向都没有空间
通过
ax=axs[:, :2]
而不是ax=axs[0, :2]
将所有行指定为拥有颜色栏。这有助于获得正确的间距您可能希望尝试
axes_grid
(https://matplotlib.org/stable/tutorials/toolkits/axes_grid.html),尽管它也有局限性相关问题 更多 >
编程相关推荐