【问题标题】:How to use a custom subset of a colormap in a colorbar and pcolosmesh plot?如何在颜色条和 pcolormesh 图中使用颜色图的自定义子集?
【发布时间】:2013-05-29 21:55:55
【问题描述】:

使用 Python 和 matplotlib,有没有方便的方法来做以下事情:

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

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

  3. 使用上面建立的颜色编码制作伪彩色图pcolormesh(X,Y,Z),其中 0

  4. 添加一个从 0 到 3 的颜色条。

这将允许在多个绘图中保持值和颜色之间的映射一致。

【问题讨论】:

标签: python matplotlib


【解决方案1】:

您需要为 LinearSegmentedColormap 制作自定义颜色图。 LinearSegmentedColormap docs中给出了如何理解下面的colormap字典的解释:

# 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。

【讨论】:

  • 你的意思是什么'为了获得你想要的效果,你需要确保你在 -5 到 5 的范围内绘图,然后将颜色条设置为只显示从 0 到 3。 '?
  • 如果你想让这个配色方案的范围在 -5 到 +5 之间,你需要告诉它在这个范围内绘图。但是,如果您只希望颜色条从 0 变为 3,则必须独立于绘制数据的比例设置颜色条比例。如果我不清楚,我很抱歉。我会展示一些代码,但我不确定如何做你想要的那部分。
  • stackoverflow.com/questions/16695275/… 我问是因为我也想不出一个干净的方法来做到这一点。
  • 这可能行得通。我不确定 matplotlib 是否旨在让您这样做,这使得这很困难。
猜你喜欢
  • 2019-11-07
  • 2014-08-24
  • 2020-06-21
  • 2019-03-08
  • 2021-12-02
  • 2021-06-03
  • 2019-10-30
  • 1970-01-01
  • 2015-05-14
相关资源
最近更新 更多