When plotting with Bokeh, how do you automatically cycle through a color pallette?

后端 未结 4 1546
别那么骄傲
别那么骄傲 2021-01-01 10:40

I want to use a loop to load and/or modify data and plot the result within the loop using Bokeh (I am familiar with Matplotlib\'s axes.color_cycle). Here is a simple exampl

相关标签:
4条回答
  • 2021-01-01 10:54

    Two small changes will make prior answer work for Python 3.

    • changed: for m, color in zip(range(10), colors):

    • prior: for m, color in itertools.izip(xrange(10), colors):

    0 讨论(0)
  • 2021-01-01 10:57

    In Python > 3.7 you could do something like this:

    from bokeh.palettes import Category10_10
           
    color = Category10_10.__iter__()
    
    p.line(x, y1, line_width=2, color=next(color))
    

    This will cycle through each element of the list until exhausted each time you use next().

    Every sequence type in python can return an iterator object.

    0 讨论(0)
  • 2021-01-01 10:58

    You can define a simple generator that cycles colors for you.

    In python 3:

    from bokeh.palettes import Category10
    import itertools
    
    def color_gen():
        yield from itertools.cycle(Category10[10])
    color = color_gen()
    

    or in python 2 (or 3):

    from bokeh.palettes import Category10
    import itertools
    
    def color_gen():
        for c in itertools.cycle(Category10[10]):
            yield c
    color = color_gen()
    

    and when you need a new color, do:

    p.line(x, y1, line_width=2, color=color)
    p.line(x, y2, line_width=2, color=color)
    

    Here is the above example:

    p = figure(width=400, height=400)
    x = np.linspace(0, 10)
    
    for m, c in zip(range(10), color):
        y = m * x
        p.line(x, y, legend='m = {}'.format(m), color=c)
    
    p.legend.location='top_left'
    show(p)
    

    0 讨论(0)
  • 2021-01-01 11:03

    It is probably easiest to just get the list of colors and cycle it yourself using itertools:

    import numpy as np
    from bokeh.plotting import figure, output_file, show
    
    # select a palette
    from bokeh.palettes import Dark2_5 as palette
    # itertools handles the cycling
    import itertools  
    
    output_file('bokeh_cycle_colors.html')
    
    p = figure(width=400, height=400)
    x = np.linspace(0, 10)
    
    # create a color iterator
    colors = itertools.cycle(palette)    
    
    for m, color in zip(range(10), colors):
        y = m * x
        p.line(x, y, legend='m = {}'.format(m), color=color)
    
    p.legend.location='top_left'
    show(p)
    

    0 讨论(0)
提交回复
热议问题