仅在某些子图上使用带颜色条的ImageGrid

时间:2017-07-30 03:36:27

标签: python matplotlib colorbar

我正在使用this answer设置3x3网格来绘制我的数据。我特意选择了这种方法,因为它适用于tight_layout()

但是,我正在阅读AxesGrid工具包上的文档,我无法弄清楚如何仅将颜色条放在最右边的图上。

到目前为止,这就是我所拥有的:

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

letters='abcdefghi'
f1=plt.figure(figsize=(9,9))
grid = ImageGrid(f1, 111,
                nrows_ncols=(3,3),
                axes_pad=0.05,
                share_all=True,
                cbar_location="right",
                cbar_mode="each",
                cbar_size="2%",
                cbar_pad=0.15)

A=np.random.rand(10,10)

for i,axis in enumerate(grid):
    im=axis.imshow(A)
    axis.annotate(s=letters[i], xy=(0.1, .85), xycoords='axes fraction', bbox=dict(boxstyle="square", fc="w", alpha=0.9))
    if i in (2,5,8):
        axis.cax.colorbar(im)
f1.tight_layout()
f1.savefig('example.png')

产生这个数字:

figure

这显然是不对的,因为每个子图都有自己的颜色条,即使它没有着色。我希望只有cfi的颜色应该不同。这可能吗?

1 个答案:

答案 0 :(得分:1)

您必须修改ImageGrid。您将cbar_mode设置为each,因此所有图片都有自己的颜色条设置为edge并将方向设置为row(一行图像的一个颜色条):

grid = ImageGrid(f1, 111,
                nrows_ncols=(3,3),
                axes_pad=0.05,
                share_all=True,
                cbar_location="right",
                cbar_mode='edge',
                direction = 'row',
                cbar_size="2%",
                cbar_pad=0.15)

enter image description here

要显示带有所有标签的colorbar,我会稍微扩展您的图f1=plt.figure(figsize=(9.5,9))

matplotlib教程中有一个边缘颜色栏示例:https://matplotlib.org/examples/axes_grid/demo_edge_colorbar.html