satiricold
satiricold

Reputation: 5

How to make a plot with multiple bars using seaborn

I have a pandas data frame and am trying to make a multi-bar bar chart using seaborn. I want to have each set of trials for the RF_# labels grouped together; for example, I want RF_1 to be separate from RF_6 and want the five trials for each respective RF_# value to be next to each other but separate from the other RF_# groups.

I have read that to make this kind of bar chart, the melt function needs to be used first, but I'm not sure how that would work for my specific data frame.

Upvotes: 0

Views: 4329

Answers (1)

Brendan
Brendan

Reputation: 4011

You can melt the dataframe, then use seaborn's x and hue arguments to create the groupings you're looking for. The example below could benefit from some column renaming and visual tweaking, but this should get you in the right direction.

Note that you can perform the melt directly in the seaborn.barplot command, but you may want to reassign this melted dataframe to a new variable for use in other plotting commands.

df = pd.DataFrame({'RF_1': {'Trial_1': 64.66,
  'Trial_2': 48.37,
  'Trial_3': 84.0,
  'Trial_4': 11.16,
  'Trial_5': 77.05},
 'RF_6': {'Trial_1': 37.19,
  'Trial_2': 17.14,
  'Trial_3': 1.5,
  'Trial_4': 66.14,
  'Trial_5': 24.19},
 'RF_7': {'Trial_1': 6.81,
  'Trial_2': 31.22,
  'Trial_3': 80.24,
  'Trial_4': 4.04,
  'Trial_5': 58.26},
 'RF_8': {'Trial_1': 20.97,
  'Trial_2': 44.52,
  'Trial_3': 11.38,
  'Trial_4': 75.17,
  'Trial_5': 92.25},
 'RF_9': {'Trial_1': 95.29,
  'Trial_2': 19.66,
  'Trial_3': 98.07,
  'Trial_4': 54.02,
  'Trial_5': 86.31}})

sns.barplot(x='RF', y='value', hue='index',
            data=df.reset_index().melt(id_vars='index', var_name='RF'))

enter image description here

Upvotes: 1

Related Questions