3个子图中2个的水平颜色条

F. *_*Win 5 axes matplotlib python-3.x colorbar

有人知道如何优雅地在三个子图中的两个上绘制水平颜色条,并在第三个子图上绘制一个额外的水平颜色条.

理想情况下,颜色条应具有与相应图像轴相同的x尺寸.除了使用设置整个图像网格外,我没有找到任何好的解决方案matplotlib.gridspec.

绘制单个颜色条可以很好地工作mpl_toolkits.axes_grid1.ImageGrid,但是当尝试在三个轴中的两个轴上绘制颜色条时它会失败.

Luc*_*cas 9

这个想法是用来fig.add_axes添加颜色条所在的轴.这是一个例子:

import numpy as np
import matplotlib.pyplot as plt

matrix = np.random.random((10, 10, 3))

fig, ax = plt.subplots(1,3, figsize=(12, 3))
plt.subplots_adjust(left=0.05, right=0.85)
for i in range(3):
    im = ax[i].imshow(matrix[:, :, i], interpolation='nearest')
    ax[i].set_aspect("equal")

plt.draw()
p0 = ax[0].get_position().get_points().flatten()
p1 = ax[1].get_position().get_points().flatten()
p2 = ax[2].get_position().get_points().flatten()
ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
plt.colorbar(im, cax=ax_cbar, orientation='horizontal')

ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
plt.colorbar(im, cax=ax_cbar1, orientation='horizontal')

plt.show()
Run Code Online (Sandbox Code Playgroud)

example_colorbar

编辑: 文档fig.add_axes说:

在位置rect [ left,bottom,width, height ] 添加一个轴,其中所有数量都是图宽度和高度的分数.

因此,要将颜色条放在图形的顶部,您只需将参数更改bottom为1即可.

ax_cbar = fig.add_axes([p0[0], 0, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 0, p2[2]-p2[0], 0.05])
Run Code Online (Sandbox Code Playgroud)

ax_cbar = fig.add_axes([p0[0], 1, p1[2]-p0[0], 0.05])
ax_cbar1 = fig.add_axes([p2[0], 1, p2[2]-p2[0], 0.05])
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述