【问题标题】:Python color map but with all zero values mapped to blackPython颜色图,但所有零值都映射为黑色
【发布时间】:2014-04-28 05:35:54
【问题描述】:

我有一个与格点相对应的方阵元素。一些元素为零,其余元素在 1 和大约 2700 之间变化。使用 imshow 和 OrRd 颜色图,我希望所有大于 0 的点阵站点都显示相应的颜色,但重要的是,所有值为 0 的站点都是显示为黑色。我尝试如下定义一个新的颜色图:

colors = [(0,0,0)] + [(pylab.cm.OrRd(i)) for i in range(1,256)] 
new_map = matplotlib.colors.LinearSegmentedColormap.from_list('new_map', colors, N=256)

但是我的数组中的值范围太大,所以很多非零值显示为黑色。

非常感谢。

【问题讨论】:

    标签: python arrays matplotlib plot color-mapping


    【解决方案1】:

    Matplotlib 的颜色图有一个 set_badset_under 属性可用于此目的。这个例子展示了如何使用set_bad

    import matplotlib.pyplot as plt
    import numpy as np
    
    # make some data
    a = np.random.randn(10,10)
    
    # mask some 'bad' data, in your case you would have: data == 0
    a = np.ma.masked_where(a < 0.05, a)
    
    # cmap = plt.cm.OrRd
    
    # for mpl 3.3 and higher use
    cmap = mpl.cm.get_cmap("OrRd").copy()
    
    cmap.set_bad(color='black')
    
    im = plt.imshow(a, interpolation='none', cmap=cmap)
    

    要使用set_under 变体,您必须在绘图命令中添加vmin 关键字,并且设置略高于零(但低于任何其他有效值):

    cmap.set_under(color='black')    
    im = plt.imshow(a, interpolation='none', cmap=cmap, vmin=0.0000001)
    

    【讨论】:

    • 如何绘制一个也反映该变化的颜色条(0 处为黑色,其他位置为 cmap)?
    • 据我所知,cmap 的 set_bad 值在颜色栏中没有表示。但是如果您使用set_under 方法,它会在使用extend="both" 显示over/under 扩展时显示。所以,plt.colorbar(im, extend='both')im 是来自imshow() 命令的可映射捕获。
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 2019-05-02
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多