1

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? Commented Jan 6, 2021 at 22:21
  • Another thing: you want to groupby cycle_label, and then what exactly you want to plot? mean, sum, etc, of yhat? Commented Jan 6, 2021 at 22:24

2 Answers 2

2

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

Sign up to request clarification or add additional context in comments.

1 Comment

Great -- thanks. This was what I was looking for.
0

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.