hatch_custom_image#

from bokeh.models import ImageURLTexture
from bokeh.plotting import figure, show

clips = [
    'https://static.bokeh.org/clipart/clipart-colorful-circles-64x64.png',
    'https://static.bokeh.org/clipart/clipart-celtic-repeating-64x64.png',
    'https://static.bokeh.org/clipart/clipart-tie-dye-64x64.png',
    'https://static.bokeh.org/clipart/clipart-ferns-64x64.png',
    'https://static.bokeh.org/clipart/clipart-diamond-tiles-64x64.png',
    'https://static.bokeh.org/clipart/clipart-abstract-squares-64x64.png',
    'https://static.bokeh.org/clipart/clipart-interlaced-pattern-64x64.png',
    'https://static.bokeh.org/clipart/clipart-mosaic-64x64.png',
    'https://static.bokeh.org/clipart/clipart-gold-stars-64x64.png',
    'https://static.bokeh.org/clipart/clipart-voronoi-2d-64x64.png',
    'https://static.bokeh.org/clipart/clipart-victorian-background-64x64.png',
    'https://static.bokeh.org/clipart/clipart-wallpaper-circles-64x64.png',
    'https://static.bokeh.org/clipart/clipart-beads-64x64.png',
]

p = figure(width=900, height=450, toolbar_location=None, tools="")
p.x_range.range_padding = p.y_range.range_padding = 0

for i, url in enumerate(clips):
    p.vbar(x=i+0.5, top=5, width=0.9, fill_color=None, line_color="black",
           hatch_pattern=dict(value='image'), hatch_extra={"image": ImageURLTexture(url=url)})

show(p)