How to make multiple plot from several indexed pandas DataFrame based on one of the multi-index levels?
I have results from a model using different technologies in different scenarios, the results may look something like this:
import numpy as np import pandas as pd df=pd.DataFrame(abs(np.random.randn(12,4)),columns=[2011,2012,2013,2014]) df['scenario']=['s1','s1','s1','s2','s2','s3','s3','s3','s3','s4','s4','s4'] df['technology'=['t1','t2','t5','t2','t6','t1','t3','t4','t5','t1','t3','t4'] dfg=df.groupby(['scenario','technology']).sum().transpose()
dfg will use technology every year for each scenario. I would like to have a subtitle for each scenario sharing the legend.
If I just use the subplots = True arguments, then it displays all possible combinations (12 subheadings)
dfg.plot(kind='bar',stacked=True,subplots=True)
Based on this answer , I came close to what I was looking for.
f,a=plt.subplots(2,2) fig1=dfg['s1'].plot(kind='bar',ax=a[0,0]) fig2=dfg['s2'].plot(kind='bar',ax=a[0,1]) fig2=dfg['s3'].plot(kind='bar',ax=a[1,0]) fig2=dfg['s3'].plot(kind='bar',ax=a[1,1]) plt.tight_layout()
but the result is not perfect, each subtitle has a different legend ... and this makes it quite difficult to read. There should be an easier way to make subtitles out of multi-indexed data frames ... Thanks!
EDIT1: Ted Petru suggested a good solution using the marine factor, but I have two problems. I already have a certain style, and I would prefer not to use the marine style (one solution could change the parameters of the seabed). Another problem is that I wanted to use a multi-line chart, requiring significant additional settings . Can I do something similar with Matplotlib?