Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Plotting Pandas Multiindex Bar Chart

Tags:

How can I plot a Python Pandas multiindex dataframe as a bar chart with group labels? Do any of the plotting libraries directly support this? This SO post shows a custom solution using matplotlib, but is there direct support for it?

As an example:

quarter  company Q1       Blue       100          Green      300 Q2       Blue       200          Green      350 Q3       Blue       300          Green      400 Q4       Blue       400          Green      450 Name: count, dtype: int64 

...can this dataframe be plotted with group labels like this?

Thanks in advance,

Rafi

like image 899
rbinnun Avatar asked Dec 13 '15 06:12

rbinnun


People also ask

How do I plot a bar chart in pandas?

Plotting Bar charts using pandas DataFrame: Using the plot instance various diagrams for visualization can be drawn including the Bar Chart. The bar() method draws a vertical bar chart and the barh() method draws a horizontal bar chart. The bar() and barh() of the plot member accepts X and Y parameters.

How do you slice a MultiIndex panda?

You can slice a MultiIndex by providing multiple indexers. You can provide any of the selectors as if you are indexing by label, see Selection by Label, including slices, lists of labels, labels, and boolean indexers. You can use slice(None) to select all the contents of that level.


1 Answers

import pandas as pd  data = pd.DataFrame([         ('Q1','Blue',100),         ('Q1','Green',300),         ('Q2','Blue',200),         ('Q2','Green',350),         ('Q3','Blue',300),         ('Q3','Green',400),         ('Q4','Blue',400),         ('Q4','Green',450),     ],      columns=['quarter', 'company', 'value'] ) data = data.set_index(['quarter', 'company']).value  data.unstack().plot(kind='bar', stacked=True) 

stacked bar chart from multiindex

If you don't want to stack your bar chart:

data.unstack().plot(kind='bar') 

not-stacked bar chart

like image 78
Goodword Avatar answered Oct 11 '22 17:10

Goodword