Q:

How to fill the bars of a pyplot barchart with arrows?

I am trying to create a barplot, where the bars contains additional information by letting arrows inside the bar point to cardinal point. 
For now I only managed to create one with colored bars. Since 8 colors for the direction plus one for nonexisting are needed, it's not as good as I hoped. There is also the difficulty to distinguish colors. 
import matplotlib.pyplot as plt
import numpy as np

x = range(12)
y_bar = np.random.random(12)

colors = ['green', 'yellow', 'blue', 'pink', 'orange']
bar_cols = [ colors[int(b*100) % len(colors)] for b in y_bar]

plt.bar(x, y_bar, color=bar_cols)
plt.show()

Therefore arrows, which point in a direction that is provided by a separate variable, are intuitive and easy to see. 
I have no clue how to do that. I already tried using hatches, but there seem to be only a limited set of symbols. 
Is there a way to get some arrows in the bars?
EDIT:
Here is a pciture, how it can look like, what I am after. The shapes of the arrows can be different. Sure, more pillars are expected. There might even be some without any arrows due to mission data.
barchar with arrows

A:

Here is a solution that uses ax.annotate to draw the arrows inside each bar. As the OP was not very clear about how the arrows should look like, I divided each bar into rectangles (I call them squares in the code, but they are only squares if you fix the aspect ratio of the plot) and drew one centred arrow per rectangle with orientation given by an angle that is supposed to be provided by the user (here in a vector called wind_direction).
Within the code I set the aspect ratio of the Axes to the aspect ratio of the x- and y-limits, which makes the Axes square-shaped and thus makes it easy to draw arrows of the same length, independent of their orientation. If that is not needed, the corresponding line can be commented out. If the arrows have to be of the same length without that limitation, the figure aspect ratio has to be calculated, see for instance here how to do that.
I also annotated each bar with the wind direction in degrees, just to make it easy to check that the arrows correspond to the given wind direction.
from matplotlib import pyplot as plt
import numpy as np

fig,ax = plt.subplots()

x = np.arange(12)
wind_strength = np.random.random(12)
wind_direction = np.linspace(0,2*np.pi,12, endpoint = False)

colors = ['green', 'yellow', 'blue', 'pink', 'orange']
bar_cols = [colors[i%len(colors)] for i,s in enumerate(wind_strength)]

bars = ax.bar(x,wind_strength, color=bar_cols)

##computing the aspect ratio of the plot ranges:
xlim = ax.get_xlim()
ylim = ax.get_ylim()
aspect = (xlim[1]-xlim[0])/(ylim[1]-ylim[0])

##comment out this line if you don't care about the arrows being the
##same length
ax.set_aspect(aspect)

##dividing each bar into 'squares' and plotting an arrow into each square
##with orientation given by wind direction
for bar,angle in zip(bars,wind_direction):
    (x1,y1),(x2,y2) = bar.get_bbox().get_points()
    w = x2-x1
    h = w/aspect
    x_mid = (x1+x2)/2

    dx = np.sin(angle)*w
    dy = np.cos(angle)*h

    ##the top and bottom of the current square:
    y_bottom = y1
    y_top = y_bottom+h

    ##draw at least one arrow (for very small bars)
    first = True

    while y_top < y2 or first:
        y_mid = (y_top+y_bottom)/2

        ax.annotate(
            '',xytext=(x_mid-dx/2,y_mid-dy/2),
            xy=(x_mid+dx/2,y_mid+dy/2),
            arrowprops=dict(arrowstyle="->"),
        )

        ##next square
        y_bottom = y_top
        y_top += h

        ##first arrow drawn:
        first = False

    ##annotating the wind direction:
    ax.text(x_mid, y2+0.05, '{}'.format(int(180*angle/np.pi)), ha = 'center')

plt.show()

The final result looks like this:

Hope this helps.

