如何将颜色条添加到subplot2grid

时间:2017-07-18 13:01:15

标签: python matplotlib subplot colormap

这应该非常简单,但出于某种原因,我无法让它发挥作用:

def plot_image(images, heatmaps):
    plt.figure(0)
    for i, (image, map) in enumerate(zip(images, heatmaps)):
        a = plt.subplot2grid((2,4), (0,i))
        a.imshow(image)
        a = plt.subplot2grid((2,4), (1,i))
        a.imshow(map)
        plt.colorbar(a, fraction=0.046, pad=0.04) 
    plt.show()

colorbar行中的值取自here,但我得到了:

  

AttributeError:' AxesSubplot'对象没有属性' autoscale_None'

我正在绘制2 x 4图像网格,并且我希望从每个图像向右显示垂直颜色条,或者可能只在网格中最右边的图像旁边显示。

1 个答案:

答案 0 :(得分:1)

plt.colorbar期望图像作为其第一个参数(或通常是ScalarMappable),而不是轴。

plt.colorbar(im, ax=ax, ...)

因此,您的示例应为:

import numpy as np
import matplotlib.pyplot as plt

def plot_image(images, heatmaps):
    fig = plt.figure(0)
    for i, (image, map) in enumerate(zip(images, heatmaps)):
        ax = plt.subplot2grid((2,4), (0,i))
        im = ax.imshow(image)
        ax2 = plt.subplot2grid((2,4), (1,i))
        im2 = ax2.imshow(map)
        fig.colorbar(im, ax=ax, fraction=0.046, pad=0.04) 
        fig.colorbar(im2, ax=ax2, fraction=0.046, pad=0.04) 
    plt.show()

a = [np.random.rand(5,5) for i in range(4)]
b = [np.random.rand(5,5) for i in range(4)]
plot_image(a,b)

enter image description here