zesla
zesla

Reputation: 11793

order bars in bar chart by value in descending order with plotly-express

I need to make a plotly bar chart with bars ordered by value in descending order. I first order the dataframe by value in descending order. Then I use plotly.express to generate interactive bar chart. However, I found the bars are still in ascending order. Does anyone know what I did wrong? Thanks a lot for help.

import plotly.express as px
dat = pd.DataFrame({'word': ['apple', 'grape', 'orange', 'pear'],
                     'counts': [20, 5, 25, 10] } )
dat = dat.sort_values('counts', ascending=False)
px.bar(dat, x = 'counts',y='word', orientation='h')

Upvotes: 10

Views: 21847

Answers (3)

Mixo
Mixo

Reputation: 1

This method breaks down (fails) when the y-category name is a number, while it works if it is a string.

import plotly.express as px
dat = pd.DataFrame({'index': [1,2, 4, 3],
                 'counts': [20, 5, 25, 10] } )
fig = px.bar(dat, x = 'counts',y='index', orientation='h')
fig.update_layout(yaxis={'categoryorder':'total ascending'}) 

Upvotes: 0

Hamzah Al-Qadasi
Hamzah Al-Qadasi

Reputation: 9786

In the latest version of plotly 5.5.0, you can use categoryorder without the need for sorting the dataframe:

import plotly.express as px
dat = pd.DataFrame({'word': ['apple', 'grape', 'orange', 'pear'],
                     'counts': [20, 5, 25, 10] } )

fig = px.bar(dat, x = 'counts',y='word', orientation='h')
fig.update_layout(yaxis={'categoryorder':'total ascending'}) # add only this line

enter image description here

Upvotes: 15

Stanislas Morbieu
Stanislas Morbieu

Reputation: 1827

You should set ascending to True: The values of the y axis are ascending from bottom to top.

Upvotes: 4

Related Questions