【问题标题】:Matplotlib python change single color in colormapMatplotlib python在颜色图中改变单色
【发布时间】:2013-04-15 15:31:13
【问题描述】:

我使用 python 中的颜色图来绘制和分析矩阵中的值。我需要将白色与等于 0.0 的每个元素相关联,而对于其他元素,我想要一个“传统”颜色图。看着Python Matplotlib Colormap我修改了pcolor使用的字典为:

dic = {'red': ((0., 1, 1), 
               (0.00000000001, 0, 0), 
               (0.66, 1, 1), 
               (0.89,1, 1), 
               (1, 0.5, 0.5)), 
       'green': ((0., 1, 1), 
                (0.00000000001, 0, 0), 
                (0.375,1, 1), 
                (0.64,1, 1), 
                (0.91,0,0), 
                (1, 0, 0)), 
       'blue': ((0., 1, 1), 
               (0.00000000001, 1, 1), 
               (0.34, 1, 1), 
               (0.65,0, 0), 
               (1, 0, 0))}

结果是:

我设置:

matrix[0][0]=0 matrix[0][1]=0.002

但正如您所见,它们都与白色相关联,即使我将 0.00000000001 设置为蓝色的起点。这怎么可能?我怎样才能改变它以获得我想要的东西?

【问题讨论】:

    标签: python matrix matplotlib color-mapping


    【解决方案1】:

    虽然不理想,但屏蔽零值是可行的。你可以用cmap.set_bad()控制它的显示。

    from matplotlib.colors import LinearSegmentedColormap
    import matplotlib.pyplot as plt
    import numpy as np
    
    dic = {'red': ((0., 1, 0), 
                   (0.66, 1, 1), 
                   (0.89,1, 1), 
                   (1, 0.5, 0.5)), 
           'green': ((0., 1, 0), 
                    (0.375,1, 1), 
                    (0.64,1, 1), 
                    (0.91,0,0), 
                    (1, 0, 0)), 
           'blue': ((0., 1, 1), 
                   (0.34, 1, 1), 
                   (0.65,0, 0), 
                   (1, 0, 0))}
    
    a = np.random.rand(10,10)
    a[0,:2] = 0
    a[0,2:4] = 0.0001
    
    fig, ax = plt.subplots(1,1, figsize=(6,6))
    
    cmap = LinearSegmentedColormap('custom_cmap', dic)
    cmap.set_bad('white')
    
    ax.imshow(np.ma.masked_values(a, 0), interpolation='none', cmap=cmap)
    

    【讨论】:

    • 能告诉我你在哪里设置“不连续”选项吗?插值 = 'none' 吗?
    • 它在您的颜色图字典中。字典的格式为 (x,y1,y2),请注意,对于你的 y1 和 y2 是相等的,我的改变。在这种情况下,使用我的颜色图,这意味着值 till 零对于 rgb 的颜色为 1(所以白色),但值 from 零对于红色和绿色的颜色为 0和 1 代表蓝色(如此蓝色)。见:matplotlib.org/api/…
    • 但是如果我像你那样定义字典,我还需要使用:np.ma.masked_values(matrix,0) 作为imshow()的参数,否则“trick”不起作用.
    • 抱歉,我在代码中混淆了两件事。我已经编辑了我的帖子,蒙面数组方法是我让它工作的唯一方法。忽略有关cmap的事情,那确实行不通。有一个“仅限 cmap”的解决方案会很好。
    猜你喜欢
    • 2023-04-04
    • 2021-01-07
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多