Not sure whether this style helps, since the color almost indicates nothing here but only makes your figure a little bit nicer.

I combined @ImportanceOfBeingErnest's answer and @unutbu's answer to form this solution. The modification is to feed the ax.imshow()
a truncated color map.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
def truncate_colormap(cmap, min_val=0.0, max_val=1.0, n=100):
"""
Truncate the color map according to the min_val and max_val from the
original color map.
"""
new_cmap = colors.LinearSegmentedColormap.from_list(
'trunc({n},{a:.2f},{b:.2f})'.format(n=cmap.name, a=min_val, b=max_val),
cmap(np.linspace(min_val, max_val, n)))
return new_cmap
x = ['A', 'B', 'C', 'D', 'E', 'F']
y = [1, 2, 3, 4, 5, 6]
fig, ax = plt.subplots()
bars = ax.bar(x, y)
y_min, y_max = ax.get_ylim()
grad = np.atleast_2d(np.linspace(0, 1, 256)).T
ax = bars[0].axes # axis handle
lim = ax.get_xlim()+ax.get_ylim()
for bar in bars:
bar.set_zorder(1) # put the bars in front
bar.set_facecolor("none") # make the bars transparent
x, _ = bar.get_xy() # get the corners
w, h = bar.get_width(), bar.get_height() # get the width and height
# Define a new color map.
# For instance, if one bar only takes 10% of the y-axis, then the color
# map will only use the first 10% of the color map.
c_map = truncate_colormap(plt.cm.jet, min_val=0,
max_val=(h - y_min) / (y_max - y_min))
# Let the imshow only use part of the color map
ax.imshow(grad, extent=[x, x+w, h, y_min], aspect="auto", zorder=0,
cmap=c_map)
ax.axis(lim)
plt.show()
PS: Sorry for not being able to use an embedded figure.