如何在colorbar和pcolormesh图中使用colormap的自定义子集?

时间:2013-05-29 21:55:56

标签: python matplotlib

使用Python和matplotlib,有一种方便的方法来执行以下操作:

  1. 建立颜色和值之间的映射,例如-5 =黑色,-2 =红色,0 =白色,+ 2 =蓝色,+ 5 =黑色

  2. 生成一个在这些值之间插值的颜色图,类似于matplotlib.colors.LinearSegmentedColormap.from_list()

  3. 制作伪彩色图pcolormesh(X,Y,Z),其中0 < Z&lt; 3使用上面建立的颜色编码。这意味着将仅使用色彩映射的子集。 (由于没有负值,因此永远不会使用红色。)

  4. 添加范围为0到3的颜色条。

  5. 这样可以使多个图中的值和颜色之间的映射保持一致。

1 个答案:

答案 0 :(得分:0)

您需要为LinearSegmentedColormap制作自定义色彩映射表。 LinearSegmentedColormap docs

中给出了如何理解下面的色彩映射字典的解释
# Create the desired color dictionary
cdict = { 'red'   : ((0.0, 0.0, 0.0),
                     (0.3, 1.0, 1.0), 
                     (0.5, 1.0, 1.0),
                     (0.7, 0.0, 0.0),
                     (1.0, 0.0, 0.0)),
          'green' : ((0.0, 0.0, 0.0),
                     (0.3, 0.0, 0.0),
                     (0.5, 1.0, 1.0),
                     (0.7, 0.0, 0.0),
                     (1.0, 0.0, 0.0)),
          'blue'  : ((0.0, 0.0, 0.0),
                     (0.3, 0.0, 0.0),
                     (0.5, 1.0, 1.0),
                     (0.7, 1.0, 1.0),
                     (1.0, 0.0, 0.0)),
        }

# Create a colormap from the above dictionary
cmap = LinearSegmentedColormap('CustomColormap', cdict, 1024)
# Use the colormap in your plot
contour = pcolormesh(X,Y,Z,cmap=cmap)
# Supply the contour to the colorbar
colorbar(contour)

基本上,色彩映射只能存在于0-1之间,因此,如果颜色变化发生在-5,-2,0,2和5,则需要点为0(-5),0.3( - 2),0.5(0),0.7(2)和1(5)。

要获得所需的效果,您需要确保绘制范围为-5到5,但是然后将颜色条设置为仅显示0到3。