Search code examples
pythonbokeh

How to fill a stacked bar diagram with patterns by using HatchPattern


I would like to add hatching fill patterns to a bokeh stacked bar diagram as written here for basic bars: https://github.com/bokeh/bokeh/pull/8859

Does anyone knows how to to that for stacked bars like this:

from bokeh.core.properties import value
from bokeh.io import show, output_file
from bokeh.plotting import figure

output_file("stacked.html")

fruits = ['Apples', 'Pears', 'Nectarines', 'Plums', 'Grapes', 'Strawberries']
years = ["2015", "2016", "2017"]
colors = ["#c9d9d3", "#718dbf", "#e84d60"]

data = {'fruits' : fruits,
        '2015'   : [2, 1, 4, 3, 2, 4],
        '2016'   : [5, 3, 4, 2, 4, 6],
        '2017'   : [3, 2, 4, 4, 5, 3]}

p = figure(x_range=fruits, plot_height=250, title="Fruit Counts by Year",
           toolbar_location=None, tools="")

p.vbar_stack(years, x='fruits', width=0.9, color=colors, source=data,
             legend=[value(x) for x in years])

p.y_range.start = 0
p.x_range.range_padding = 0.1
p.xgrid.grid_line_color = None
p.axis.minor_tick_line_color = None
p.outline_line_color = None
p.legend.location = "top_left"
p.legend.orientation = "horizontal"

show(p)

Solution

  • For built-in patterns, you only need to pass the list of patterns to vbar_stack, just the same as colors, and the values will be broadcast over all the levels of the stack:

    p.vbar_stack(..., hatch_pattern=['dot', 'spiral', 'vertical_wave'])
    

    enter image description here

    Full information on hatch patterns is here :

    https://docs.bokeh.org/en/latest/docs/user_guide/styling/visuals.html#hatch-properties