【问题标题】:Adjust colormap in holoviews bokeh to match distribution of values调整 holoviews 散景中的颜色图以匹配值的分布
【发布时间】:2018-12-17 06:46:02
【问题描述】:

我使用以下选项在 jupyter notebook 的 Holoviews 中创建了一张带有散景扩展的地图:

%output size=150
%opts Overlay [show_legend=True, width=800 height=400]
%opts Points.Data [color_index='b' size_index='a' scaling_factor=10 colorbar=True](cmap='RdYlGn' size=3)

“b”和“a”都是介于 -1 和 1 之间的变量。

这会产生两个问题(也比较图片):

  1. 这些点的大小是根据变量“a”的绝对值。但是,我希望值产生更小(更大)的点,值越负(正)。任何解决方案(除了在绘图之前将“a”重新调整为正范围)?
  2. 由于“b”的正值明显多于负值,因此几乎所有点 a 都映射为绿色,而颜色范围的负值部分很少使用。我不想转换“b”,因为我希望在颜色图例中显示它的值是有意义的。有什么建议如何调整颜色图以更好地反映“b”值的分布?

我是 holoviews/bokeh 的新手,还没有习惯语法。因此,我也很欣赏示例代码。

【问题讨论】:

    标签: colors bokeh color-mapping holoviews


    【解决方案1】:

    您的第一个问题的答案非常简单,Points 支持 size_fn 选项,您可以使用它来转换大小值,然后再绘制一些简单的东西,比如将点偏移 1 就可以了。第二个问题比较棘手,没有直截了当的答案。如果低于 0 的点很少,我会考虑发散颜色图是否是正确的选择。也许只是将颜色维度的范围设置为 0-1,使用标准颜色图并为范围之外的值设置特殊颜色。

    # Make some fake data
    lon, lat = np.random.rand(2, 100)*180-90
    a = np.clip((np.random.randn(100) + 1)/2., -1, 1)
    b = np.clip((np.random.randn(100) + 1)/2., -1, 1)
    df = pd.DataFrame({'lon': lon, 'lat': lat, 'a': a, 'b': b})
    
    gv.tile_sources.EsriImagery * gv.Points(df, ['lon', 'lat']).options(
        width=600, height=400, color_index='a', size_fn=lambda x: x+1, 
        scaling_factor=20, size_index='b', colorbar=True, cmap='Greens', 
        clipping_colors={'min': "red"}
    ).redim.range(a=(0, 1))
    

    在上面的示例中,我使用size_fn 将颜色值偏移了一个,因此它们都是正数并且可以缩放。其次,我使用.redim.range 方法将颜色值的范围设置为0-1。最后我用clipping_colors 表示任何低于最小值(0)的值都应该被涂成红色。

    【讨论】:

      【解决方案2】:

      要回答 #2,您可以使用默认颜色图制作自己的颜色图,然后像这样从颜色图的末端移除许多颜色(更改开始/停止)

      from matplotlib.colors import LinearSegmentedColormap
      import matplotlib.pyplot as plt
      cmap_name = 'RdBu_r'
      start = 0.4
      stop = 1
      n = 256
      cmap = plt.get_cmap(cmap_name)
      colors = cmap(np.linspace(start, stop, cmap.N))
      new_cmap = LinearSegmentedColormap.from_list('mycmap', colors=colors, N=n)
      

      然后做一个points = points.redim.range(data=(-0.2, 1))

      例如,下面,我从 RdBu_r 中删除了所有的蓝色,只留下红色 https://holoext.readthedocs.io/en/latest/examples/changing_colorbar_cmap.html#Colorbar-string-shortcut

      【讨论】:

        猜你喜欢
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 2021-06-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多