Using colormap with bokeh scatter

前端 未结 2 911
情深已故
情深已故 2021-02-08 08:03

In matplotlib the scatterplot offers the possibility of using the color of a plot to indicate value or magnitude like this plot:

For bokeh

相关标签:
2条回答
  • 2021-02-08 08:34

    It's easy enough to just use matplotlib's colormaps directly. For example, the following uses viridis in bokeh's example (note that I'm using a jupyter notebook):

    import numpy as np
    
    from bokeh.plotting import figure, show, output_notebook
    import matplotlib as mpl
    
    output_notebook()
    
    N = 4000
    x = np.random.random(size=N) * 100
    y = np.random.random(size=N) * 100
    radii = np.random.random(size=N) * 1.5
    colors = [
        "#%02x%02x%02x" % (int(r), int(g), int(b)) for r, g, b, _ in 255*mpl.cm.viridis(mpl.colors.Normalize()(radii))
    ]
    
    p = figure()
    
    p.scatter(x, y, radius=radii,
              fill_color=colors, fill_alpha=0.6,
              line_color=None)
    
    show(p)  
    

    Essentially, for any matplotlib colormap in cm, initializing it with an array of values will return an array with each value replaced by [r,g,b,a] values in the range [0,1]. Note that this assumes all the values are between 0 and 1 as well; here I use matplot.colors.Normalize to ensure this.

    0 讨论(0)
  • 2021-02-08 08:39

    Another option if you want to use a field name, is to use a LinearColorMapper:

    from bokeh.models import LinearColorMapper
    
    color_mapper = LinearColorMapper(palette='Magma256', low=min(radii), high=max(radii))
    
    p.scatter(x,y,color={'field': 'radii', 'transform': color_mapper})
    
    0 讨论(0)
提交回复
热议问题