You can use the following methods to change the order of bars in a seaborn plot:
Method 1: Sort Bars in Barplot Created from Raw Data
sns.barplot(x='xvar', y='yvar', data=df, order=df.sort_values('yvar').xvar)
Method 2: Sort Bars in Barplot Created from Aggregated Data
sns.barplot(x='xvar', y='yvar', data=df, order=df_agg['xvar']
The following examples show how to use each method in practice.
Example 1: Sort Bars in Barplot Created from Raw Data
Suppose we have the following pandas DataFrame that contains information about the total sales made by various employees at a company:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'employee': ['Andy', 'Bert', 'Chad', 'Doug', 'Eric', 'Frank'],
'sales': [22, 14, 9, 7, 29, 20]})
#view DataFrame
print(df)
employee sales
0 Andy 22
1 Bert 14
2 Chad 9
3 Doug 7
4 Eric 29
5 Frank 20
We can use the following syntax to create a barplot where the bars are sorted in ascending order based on the sales value:
import seaborn as sns #create barplot with bars sorted by sales values ascending sns.barplot(x='employee', y='sales', data=df, order=df.sort_values('sales').employee)
To instead sort the bars in descending order, simply use ascending=False within the sort_values() function:
import seaborn as sns #create barplot with bars sorted by sales values descending sns.barplot(x='employee', y='sales', data=df, order=df.sort_values('sales', ascending=False).employee)
Example 2: Sort Bars in Barplot Created from Aggregated Data
Suppose we have the following pandas DataFrame that contains information about the total sales made by various employees at a company:
import pandas as pd
#create DataFrame
df = pd.DataFrame({'employee': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'],
'sales': [24, 20, 25, 14, 19, 13, 30, 35, 28]})
#view DataFrame
print(df)
employee sales
0 A 24
1 A 20
2 A 25
3 B 14
4 B 19
5 B 13
6 C 30
7 C 35
8 C 28
We can use the following syntax to calculate the mean sales value, grouped by employee:
#calculate mean sales by employee df_agg = df.groupby(['employee'])['sales'].mean().reset_index().sort_values('sales') #view aggregated data print(df_agg) employee sales 1 B 15.333333 0 A 23.000000 2 C 31.000000
We can then use the following syntax to create a barplot in seaborn that displays the mean sales by employee with the bars displayed in ascending order:
import seaborn as sns #create barplot with bars ordered in ascending order by mean sales sns.barplot(x='employee', y='sales', data=df, order=df_agg['employee'], errorbar=('ci', False))
The x-axis displays the employee name and the y-axis displays the mean sales value for each employee.
Additional Resources
The following tutorials explain how to perform other common functions in seaborn:
How to Show Values on Seaborn Barplot
How to Create a Grouped Barplot in Seaborn
How to Set the Color of Bars in a Seaborn Barplot