Reputation: 1695
I want the bars in a Pandas chart to each be given a different colour. The solution looks pretty simple according to this post and ones like it.
When I try to emulate the solution, I end up with all the bars the same colour (albeit a different colour from the standard one). I guess that I'm doing something wrong, but I can't see what it is. Anyone else see it?
fig = df.plot(kind='bar', # Plot a bar chart
legend=False, # Turn the Legend off
width=0.75, # Set bar width as 75% of space available
figsize=(8,5.8), # Set size of plot in inches
colormap='Paired')
The colormap='Paired'
is the bit that's meant to change the colours. I get this:
It's nice, but all the bars are the same colour! I'm making other changes to the plot, as you can see above, but they're all formatting of text or removal of axis details.
Upvotes: 5
Views: 17535
Reputation: 11653
This should also work:*
df['Degree'].plot.bar()
This is different because df['Degree']
is a series.
Pandas Series seem to be plotted with each bar a different colour (presumably as each is assumed to be from a different category or label) whereas in a dataframe each series is assumed to be a set of values from one category so they are given the same colour.
For example:
s = pd.Series({'a': 100, 'b': 74, 'c': 50})
s.plot.bar()
Produces:
UPDATE:
* Apparently for pandas versions < 0.17.0 you must use s.plot(kind='bar')
not s.plot.bar()
. I suspect the colour behaviour I am showing here is also version-specific. This demo was done with version 0.22.0.
Upvotes: 1
Reputation: 153550
Let's use this code instead:
df.plot(kind='bar', # Plot a bar chart
legend=False, # Turn the Legend off
width=0.75, # Set bar width as 75% of space available
figsize=(8,5.8), # Set size of plot in inches
color=[plt.cm.Paired(np.arange(len(df)))])
Upvotes: 11