apply images to pyplot python bar graphs
<p>So below is a snippet of my code, and it all works fine. Just curious instead of display bars with specific colors, can an image be applied to the bar, such as a countries flag etc. (please ignore my inconsistent order of param passing)</p>

<p>thanks</p>

<pre><code>l_images=["australia.png","turkey.png"] # this is desired
l_colors=["pink","blue"]

if (l_bar_dir=="vertical"):                             
 plt.bar(xs2,ys,tick_label=xs,color=l_colors,bottom=bottoms,width=bar_width,align='center') # set plot to be a bar graph
else:                           
 plt.barh(bottom=xs2,width=ys,tick_label=xs,align='center',color=l_colors) # set plot to be a bar graph
</code></pre>

<p>AFAIK there's no built-in way to do this, although <code>matplotlib</code> does allow hatches in bar plots. See for example, <a href="http://matplotlib.org/examples/pylab_examples/hatch_demo.html" rel="nofollow">hatch_demo</a>.</p>

<p>But it's not terribly difficult to put together several calls to <code>plt.imshow</code> in the form of a bar plot. Here is a rather crude function that could be used to make basic bar plots using images, using your idea of flags as the images.</p>

<pre><code>import numpy as np
import matplotlib.pyplot as plt
from scipy.misc import imread

def image_plot(heights, images, spacing=0):
    # Iterate through images and data, autoscaling the width to
    # the aspect ratio of the image
    for i, (height, img) in enumerate(zip(heights, images)):
        AR = img.shape[1] / img.shape[0]
        width = height * AR
        left = width*i + spacing*i
        right = left + width
        plt.imshow(img, extent=[left, right, 0, height])
    # Set x,y limits on plot window
    plt.xlim(0, right)
    plt.ylim(0, max(heights)*1.1)

# Read in flag images
usa_flag = imread('american_flag.png')
aussie_flag = imread('australian_flag.png').swapaxes(0, 1)
turkish_flag = imread('turkish_flag.png').swapaxes(0, 1)

# Make up some data about each country
usa_data = 33
aussie_data = 36
turkish_data = 27

data = [usa_data, aussie_data, turkish_data]
flags = [usa_flag, aussie_flag, turkish_flag]

image_plot(data, flags, spacing=2)
</code></pre>

<p>Without doing anything fancy to the <code>x</code> and <code>y</code> axes, returns this plot.</p>

<p><a href="https://i.stack.imgur.com/mAOL4.png" rel="nofollow"><img src="https://i.stack.imgur.com/mAOL4.png" alt="enter image description here"></a></p>

python image matplotlib graph