【问题标题】:How to map number to color using matplotlib's colormap?如何使用 matplotlib 颜色图将数字映射到颜色?
【发布时间】:2013-02-14 21:52:55
【问题描述】:

考虑一个包含浮点数的变量x。我想使用 matplotlib 的颜色图将此数字映射到颜色,但不绘制任何内容。基本上,我希望能够选择带有mpl.cm.autumn 的颜色图,例如,使用mpl.colors.Normalize(vmin = -20, vmax = 10) 设置范围,然后将x 映射到相应的颜色。但是我真的没有得到mpl.cm的文档,所以如果有人可以给我一个提示。

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    就像cm.hot(0.3)一样简单:

    import matplotlib.cm as cm
        
    print(cm.hot(0.3))
    
    (0.8240081481370484, 0.0, 0.0, 1.0)
    

    如果您还想拥有规范化器,请使用

    import matplotlib as mpl
    import matplotlib.cm as cm
       
    norm = mpl.colors.Normalize(vmin=-20, vmax=10)
    cmap = cm.hot
    x = 0.3
    
    m = cm.ScalarMappable(norm=norm, cmap=cmap)
    print(m.to_rgba(x))
    
    (1.0, 0.8225486412996345, 0.0, 1.0)
    

    【讨论】:

      【解决方案2】:

      您可以通过提供介于 0 和 1 之间的参数来从颜色图中获取颜色,例如cm.autumn(0.5)

      如果游戏中有规范化实例,则使用规范化的返回代替:

      import matplotlib.cm as cm
      from matplotlib.colors import Normalize
      
      cmap = cm.autumn
      norm = Normalize(vmin=-20, vmax=10)
      print cmap(norm(5))
      

      【讨论】:

      • 这种使用 API 的方式看起来确实干净多了。
      【解决方案3】:

      颜色图颜色的数值

      import matplotlib.cm as cm
      import matplotlib as matplotlib
      
      def color_map_color(value, cmap_name='Wistia', vmin=0, vmax=1):
          # norm = plt.Normalize(vmin, vmax)
          norm = matplotlib.colors.Normalize(vmin=vmin, vmax=vmax)
          cmap = cm.get_cmap(cmap_name)  # PiYG
          rgb = cmap(norm(abs(value)))[:3]  # will return rgba, we take only first 3 so we get rgb
          color = matplotlib.colors.rgb2hex(rgb)
          return color
      

      【讨论】:

      • 谢谢你!经过数小时的搜索,这就是解决我的问题的方法。
      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      相关资源
      最近更新 更多