代码之家  ›  专栏  ›  技术社区  ›  piRSquared

使用不在映射中的值的颜色栏

  •  1
  • piRSquared  · 技术社区  · 7 年前

    我正在创建一个包含多个子图的图形。对于每个子批次,我将设置 facecolor . 我想在左边提供一个颜色栏,它给出了我设置的背景色。但是,我知道如何做到这一点的唯一方法,包括 mapping 我不想在那里。

    另外,我认识到这可能是一个xy问题。我乐于接受批评和任何方法来达到我的最终目标

    [MCVE ]

    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    
    np.random.seed([3, 1415])
    
    a = np.random.rand(3, 3)
    
    f, axes = plt.subplots(3, 4)
    
    jet = cm.jet
    
    for i in range(3):
        for j in range(1, 4):
            axes[i, j].set_facecolor(jet(a[i, j-1]))
    
    m = plt.subplot2grid(axes.shape, (0, 0), rowspan=3).imshow(a, jet)
    plt.colorbar(m)
    

    enter image description here

    我想要这个

    enter image description here

    1 回复  |  直到 7 年前
        1
  •  3
  •   ImportanceOfBeingErnest    7 年前

    颜色栏需要在数字和颜色之间使用一些映射。但是,如果您不想在您的图形中显示这一点,您可以用最一般的方式创建这个映射,即使用 ScalarMappable 实例。

    import matplotlib.pyplot as plt
    from matplotlib import cm
    import numpy as np
    
    np.random.seed([3, 1415])
    
    a = np.random.rand(3, 3)
    
    f, axes = plt.subplots(3, 3)
    
    jet = cm.jet
    
    for i in range(3):
        for j in range(3):
            axes[i, j].set_facecolor(jet(a[i, j]))
    
    m = cm.ScalarMappable(cmap=jet)
    m.set_array([])
    plt.colorbar(m, ax=axes)
    
    plt.show()
    

    enter image description here

    如果游戏中存在标准化,例如 norm = plt.Normalize(-1,2) 你可以用它来获得正确的颜色 jet(norm(a[i, j])) 并将映射表创建为 cm.ScalarMappable(cmap=jet, norm=norm) .