0
votes

I am having trouble making a grouped bar chart with the given structure of my pandas df which looks like this:

           yhat    yhat_upper    yhat_lower    cat    grp cycle_label
0  5.716087e+08  6.123105e+08  5.319125e+08  yello  costs    funding1
1  1.501483e+08  1.641132e+08  1.452377e+08   blue  costs    funding1
2  7.217570e+08  7.764237e+08  6.771502e+08  Total  costs    funding1
3  3.066355e+08  3.473373e+08  2.669394e+08  yello  costs    funding2
4  5.277504e+07  6.673995e+07  4.786445e+07   blue  costs    funding2
5  3.594106e+08  4.140773e+08  3.148039e+08  Total  costs    funding2

I want a bar chart that shows each "cat" column grouped by the "cycle_label" values along the x-axis. I've tried this but not working:

fig.add_trace(go.Bar(x=sum_matrix_tmp_df['cycle_label'], y=sum_matrix_tmp_df['yhat'],
                name=sum_matrix_tmp_df['cat'])

Any help would be much appreciated!

2
What was your error message?zabop
Another thing: you want to groupby cycle_label, and then what exactly you want to plot? mean, sum, etc, of yhat?zabop

2 Answers

1
votes

Split the dataframe by the columns you want to group and use plotly to create a graph based on it.

import plotly.graph_objects as go

f1 = tmp_df[tmp_df['cycle_label'] == 'funding1']
f2 = tmp_df[tmp_df['cycle_label'] == 'funding2']
cats = df['cat'].unique().tolist()

fig = go.Figure()

fig.add_trace(go.Bar(x=cats, y=f1['yhat'], name='funding1'))
fig.add_trace(go.Bar(x=cats, y=f2['yhat'], name='funding2'))
fig.show()

enter image description here

0
votes

You can do the groupby operation followed by a sum, for example:

df.groupby('cycle_label').sum().reset_index()

This will give you:

  cycle_label          yhat    yhat_upper    yhat_lower
0    funding1  1.443514e+09  1.552847e+09  1.354300e+09
1    funding2  7.188211e+08  8.281546e+08  6.296078e+08

To do a basic plot, using matplotlib, do:

plt.bar([0,1],df.groupby('cycle_label').sum().reset_index()['yhat'])

giving you:

enter image description here

I believe something similar can be done in plotly.