【问题标题】:Python Matplotlib ColormapPython Matplotlib 颜色图
【发布时间】:2012-04-11 05:09:12
【问题描述】:

我使用颜色图“jet”来绘制我的图形。但是,我希望白色的值较低,并且此颜色图从蓝色变为红色。我也不想使用另一个颜色图,因为我需要这个颜色范围...... 我试图使我的颜色图与具有一系列白色值的“jet”相同,但这太难了。 有人可以帮助我吗? 谢谢你

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    可能应该有一个最简单的解决方案,但我想出的方法是基于“jet”创建自己的 matplotlib.colors.LinearSegmentedColormap。

    (颜色图的最低级别定义在每个红色、绿色和蓝色元组的第一行,因此您可以从那里开始编辑。我添加了一个额外的元组,以便在下部有一个明显的白点。 ...对于每种颜色,在元组的第一个元素中指示颜色条中的位置(从 0 到 1),在第二和第三个元素中指示颜色本身)。

    from matplotlib.pyplot import *
    import matplotlib
    import numpy as np
    
    cdict = {'red': ((0., 1, 1),
                     (0.05, 1, 1),
                     (0.11, 0, 0),
                     (0.66, 1, 1),
                     (0.89, 1, 1),
                     (1, 0.5, 0.5)),
             'green': ((0., 1, 1),
                       (0.05, 1, 1),
                       (0.11, 0, 0),
                       (0.375, 1, 1),
                       (0.64, 1, 1),
                       (0.91, 0, 0),
                       (1, 0, 0)),
             'blue': ((0., 1, 1),
                      (0.05, 1, 1),
                      (0.11, 1, 1),
                      (0.34, 1, 1),
                      (0.65, 0, 0),
                      (1, 0, 0))}
    
    my_cmap = matplotlib.colors.LinearSegmentedColormap('my_colormap',cdict,256)
    
    pcolor(np.random.rand(10,10),cmap=my_cmap)
    colorbar()
    show()
    

    您将获得以下信息:

    【讨论】:

      【解决方案2】:

      还有另一种方法可以在不定义新 colobar 的情况下执行相同的操作。 您可以使用 cmap.set_under 方法定义用于低于给定阈值的所有值的颜色。阈值是在 pcolormesh 期间定义的:

      from matplotlib.pyplot import *
      import numpy as np
      
      mycmap = cm.get_cmap('jet')
      mycmap.set_under('w')
      
      pcolor(np.random.rand(10,10), cmap=mycmap, vmin=.1)
      colorbar()
      show()
      

      【讨论】:

        【解决方案3】:

        colormaps page 上有很多这个例子。在我的机器上挖掘matplotlib 源,jet 被定义为(在_cm.py):

        _jet_data =   {'red':   ((0., 0, 0), (0.35, 0, 0), (0.66, 1, 1), (0.89,1, 1),
                                 (1, 0.5, 0.5)),
                       'green': ((0., 0, 0), (0.125,0, 0), (0.375,1, 1), (0.64,1, 1),
                                 (0.91,0,0), (1, 0, 0)),
                       'blue':  ((0., 0.5, 0.5), (0.11, 1, 1), (0.34, 1, 1), (0.65,0, 0),
                                 (1, 0, 0))}
        

        【讨论】:

        • 谢谢,但我怎样才能为最低级别添加白色?我不太了解三重数字,在哪里可以找到它们?例如,如果我想将颜色条从值 0 更改为 10,我需要添加其他三元组?
        • 颜色图的最低级别定义在每个红色、绿色和蓝色元组的第一行,其中元组的第一个元素表示值 gamma(从 0 到 1)(想想关于颜色栏中的“位置”)。
        • 正如 E 先生所写,您可以在 _cm.py 中找到生成 matplotlib 颜色图的字典。该文件存储在您的 Python 文件夹中,通常位于以下路径:C:\Python##\Lib\site-packages\matplotlib\
        • 感谢您的帮助!这就是我要找的东西!
        • 对于其他所有人:您也可以使用 _segmentdata 属性访问细分数据。所以,mpl.cm.jet._segmentdata.
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-06-29
        • 2017-06-19
        • 2019-04-11
        • 2014-10-19
        • 2020-10-07
        • 2014-05-05
        • 1970-01-01
        相关资源
        最近更新 更多