Python 使用轴_grid1而不操纵子地块

Python 使用轴_grid1而不操纵子地块,python,python-3.x,matplotlib,subplot,Python,Python 3.x,Matplotlib,Subplot,我想用axes_grid1在我的一个子图旁边画一个颜色条。 问题是,make_axes_locatable的调用会操纵我的子绘图,使其不再具有与其他绘图相同的大小 下面是我的问题的一个最简单的工作示例 from mpl_toolkits.axes_grid1 import make_axes_locatable import numpy as np import matplotlib import matplotlib.pyplot as plt fig, ax = plt.subplots(

我想用axes_grid1在我的一个子图旁边画一个颜色条。 问题是,make_axes_locatable的调用会操纵我的子绘图,使其不再具有与其他绘图相同的大小

下面是我的问题的一个最简单的工作示例

from mpl_toolkits.axes_grid1 import make_axes_locatable
import numpy as np
import matplotlib
import matplotlib.pyplot as plt

fig, ax = plt.subplots(nrows=2, ncols=2, figsize=(15,5))
_ax = ax[0,:].flatten('C')
values_x = np.linspace(0, 2 * np.pi, 100)
values_y = np.sin(values_x)
vmax = np.amax(values_x)
vmin = np.amin(values_x)
s = 1
ticks_rotation = 10
ticks_num = 5
_ax = ax[0,:].flatten('C')
plot_w = _ax[0].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
plot_v = _ax[1].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
_ax = ax[1,:].flatten('C')
plot_w = _ax[0].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)
plot_v = _ax[1].scatter(values_x, values_y, c=values_x, cmap='rainbow', vmin=vmin, vmax=vmax, s=s)

divider = make_axes_locatable(_ax[1])
cax = divider.append_axes('right', size='5%', pad=0.05)
v_delta = (vmax - vmin)*0.1
ticks = np.linspace(vmin+v_delta,vmax-v_delta,ticks_num)
cbar = fig.colorbar(plot_v, cax=cax, orientation='vertical', ticks=ticks)
cbar.ax.set_yticklabels(np.around(ticks,decimals=1), rotation=ticks_rotation,rotation_mode='default')
plt.show()
我想要的实际上是所有大小相同的子批次,旁边有一个漂亮的颜色。 有什么建议吗

编辑:
我真的只想在右下角的子绘图之外使用颜色栏,而不是像。

如果您不喜欢使用Axis\u grid1,我个人更喜欢使用这种类型的作业

gridspec是一个模块,用于指定子地块在中的位置 这个数字

指定将放置子地块的栅格的几何图形。网格的行数和列数需要 准备好了。子地块布局参数(如左、右、, 等可以调整


看一看?具体地说,我已经看过这个功能演示,但是没有任何令人满意的结果,或者可能是我。顺便说一句,我还没有找到一个解释演示网格与单cbar在这一边。好的,但我只想有它在右下角的子地块旁边。这也是可能的吗?当然,将cax的定义更改为cax=fig.add_subplotgs0[1,2]这看起来很棒,可以完成任务,谢谢!
import matplotlib.gridspec as gs

gs0 = gs.GridSpec(2, 3, width_ratios=[20,20,1])
fig = plt.figure(figsize=(10,4))
ax1 = fig.add_subplot(gs0[0,0])
ax2 = fig.add_subplot(gs0[0,1])
ax3 = fig.add_subplot(gs0[1,0])
ax4 = fig.add_subplot(gs0[1,1])
cax = fig.add_subplot(gs0[:,2])


values_x = np.linspace(0, 2 * np.pi, 100)
values_y = np.sin(values_x)

for ax in [ax1,ax2,ax3,ax4]:
    plot_w = ax.scatter(values_x, values_y, c=values_x, cmap='rainbow', s=1)

cbar = fig.colorbar(plot_w, cax=cax, orientation='vertical')