Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Barplot colored according a colormap?

First of all, I'm pretty new to colors in Matplotlib or Seaborn. My purpose is to create a barplot with bars coloured according to a custom palette. Something like this, but with my custom palette (see below, a palette with red, orange, green and blue):

barplot

I have created my custom sequential palette using the LinearSegmentedColormap method, but I'm not able to use it in a simple plt.barplot(). Sure it's not difficult, but I can't see the way. I created the palette using the function below, got from this thread: Create own colormap using matplotlib and plot color scale

def make_colormap(seq):
"""Return a LinearSegmentedColormap
seq: a sequence of floats and RGB-tuples. The floats should be increasing
and in the interval (0,1).
"""
seq = [(None,) * 3, 0.0] + list(seq) + [1.0, (None,) * 3]
cdict = {'red': [], 'green': [], 'blue': []}
for i, item in enumerate(seq):
    if isinstance(item, float):
        r1, g1, b1 = seq[i - 1]
        r2, g2, b2 = seq[i + 1]
        cdict['red'].append([item, r1, r2])
        cdict['green'].append([item, g1, g2])
        cdict['blue'].append([item, b1, b2])

return mcolors.LinearSegmentedColormap('CustomMap', cdict)

#main#
c = mcolors.ColorConverter().to_rgb
rvb = make_colormap(
[c('red'), 0.125, c('red'), c('orange'), 0.25, c('orange'),c('green'),0.5, c('green'),0.7, c('green'), c('blue'), 0.75, c('blue')])

N = 1000
array_dg = np.random.uniform(0, 10, size=(N, 2))
colors = np.random.uniform(0, 5, size=(N,))
plt.scatter(array_dg[:, 0], array_dg[:, 1], c=colors, cmap=rvb)
plt.colorbar()
plt.show()

That returns this plot:

plot palette ok

As far as I can understand, I can't use a colormap (object type from LinearSegmentedColormap()? ) for barplots, but colormap is the unique way I have achieved a custom sequential palette.

In summary, I want to apply the colormap of the second plot (the scatterplot) to the first plot (the barplot). For now I can't do it because the barplot() function has not an argument that accepts a LinearSegmentedColormap object type.

I'm probably making it harder than it really is, so I would appreciate any cleaner or more correct way.

like image 846
Dani Carrillo Avatar asked Mar 07 '17 19:03

Dani Carrillo


People also ask

How do I change the color of my Bar Plot?

You can change the color of bars in a barplot using color argument. RGB is a way of making colors. You have to to provide an amount of red, green, blue, and the transparency value to the color argument and it returns a color.

Is it possible to have a separate color for each category in a bar graph in MatPlotLib?

To set different colors for bars in a Bar Plot using Matplotlib PyPlot API, call matplotlib. pyplot. bar() function, and pass required color values, as list, to color parameter of bar() function. Of course, there are other named parameters, but for simplicity, only color parameter is given.

How do you color a bar graph in Matlab?

By default, when you create a bar chart, the CData property contains a three-column matrix of RGB triplets. You can change the color for a particular bar by changing the corresponding row in the matrix. This property applies only when the FaceColor or EdgeColor property is set to 'flat' .


1 Answers

Seaborn barplot is great for this, example:

ax = sns.barplot("size", y="total_bill", data=tips, palette="Blues_d")
like image 116
Emanuel Avatar answered Oct 14 '22 18:10

Emanuel