在下面的代码中,变量mat_store
显示在中心轴上,然后折叠的条形图(跨矩阵的每个轴)显示在矩阵的顶部和侧面。我还想在图的底部显示矩阵的颜色条。
num_bins = mat_store.shape[0]
fig = plt.figure(figsize=(16, 16))
gs = fig.add_gridspec(3, 2, width_ratios=(7, 2), height_ratios=(2, 7, 0.5),
left=0.1, right=0.9, bottom=0.1, top=0.9,
wspace=0.05, hspace=0.15)
ax = fig.add_subplot(gs[1, 0])
ax_histx = fig.add_subplot(gs[0, 0], sharex=ax)
ax_histy = fig.add_subplot(gs[1, 1], sharey=ax)
ax_histx.tick_params(axis="x", labelbottom=False)
ax_histy.tick_params(axis="y", labelleft=False)
abs_serial = jnp.abs(mat_store)
cur_trial_dependence = jnp.sum(abs_serial,axis=0)
pre_trial_dependence = jnp.sum(abs_serial,axis=1)
ax_histx.bar(np.arange(num_bins)-0.5, cur_trial_dependence, align="edge",color='k',linewidth=0,width = 1)
ax_histy.barh(np.arange(num_bins)-0.5, pre_trial_dependence, height = 1, align="edge",color='k',linewidth=0,alpha=0.25)
ax_histy.get_xaxis().set_ticks([])
ax_histx.get_yaxis().set_ticks([])
ax_histx.tick_params(
which='both', # both major and minor ticks are affected
bottom=False, # ticks along the bottom edge are off
top=False, # ticks along the top edge are off
labelbottom=False) # labels along the bottom edge are off
ax_histy.tick_params(
which='both', # both major and minor ticks are affected
left=False,
right=False,
labelbottom=False) # labels along the bottom edge are off
max_value = jnp.max(abs_serial)
hist = ax.imshow(mat_store,origin="lower",cmap="seismic",vmin=-max_value,vmax=max_value)
ax.set_ylabel(r"$S_{n-1}$")
ax.set_xlabel(r"$S_{n}$")
ax.set_title(r"$\langle \{S_{n-1},S_{n}\} \rangle - \langle S_{n} \rangle$")
ax.set_yticks([0,num_bins-1])
ax.set_yticklabels([r"$-\pi$",r"$\pi$"])
ax.set_xticks([0,num_bins-1])
ax.set_xticklabels([r"$-\pi$",r"$\pi$"])
ax.plot([0,num_bins-1],[0,num_bins-1],color="white",ls="--",lw=2)
ax.axvline((num_bins-1)/2,color="white",ls="--",lw=2)
ax.axhline((num_bins-1)/2,color="white",ls="--",lw=2)
col_ax = fig.add_subplot(gs[2, 0])
fig.colorbar(hist,cax = col_ax,orientation="horizontal")
生成此图像
正如你所看到的,有几个问题。
1.我想向下移动颜色条,这样它就不会遮挡轴标签,同时也不会向上移动顶部的条形图,所以简单地修改add_gridspec
中的hspace
参数在这里是不合适的。移动轴标签(为了一致性,也可以垂直移动)也可以,但我也不知道如何操作。
1.更大的问题是,为什么在gridspec中添加axtra轴会使中心轴缩小?如果我没有第三行,矩阵将与顶行中的条形图完全对齐。为什么添加第三行会改变中轴的宽度?为什么不修改最上面的一行呢?我如何修复这个问题,使所有子图的边缘都对齐?
编辑
使坐标轴可定位也是一种技巧。编辑后的代码如下
num_bins = mat_store.shape[0]
fig = plt.figure(figsize=(16, 16))
gs = fig.add_gridspec(3, 2, width_ratios=(7, 2), height_ratios=(2, 7, 0.5),
left=0.1, right=0.9, bottom=0.1, top=0.9,
wspace=0.05, hspace=0.15)
...
divider = make_axes_locatable(ax)
cax = divider.new_vertical(size="5%", pad=0.7, pack_start=True)
fig.add_axes(cax)
fig.colorbar(hist,cax = cax,orientation="horizontal")
但是正如你所看到的,主轴仍然缩小了,尽管至少颜色条现在与它一致。此外,右手轴跨越整个两个子图,而不仅仅是中心矩阵。我试过使用gridspec(2,2,...)
,但没有效果。
2条答案
按热度按时间c86crjj01#
您可以像在
fig.colorbar(hist,cax = col_ax,orientation="horizontal", pad=0.2)
中那样使用pad
参数。这将修改颜色条的位置。knsnq2tg2#
解决了!设置
figsize=(16,16)
是将图形压扁,这意味着中心矩阵,为了保持正方形,正在变小。把它改成figsize=(16,17.55)
救了我。为了在轴上移动标题,我使用了labelpad
参数。