Can I use seaborn.countplot to display my data?

Viewed 123

I am having trouble displaying some HR scores data with seaborn. I want to use a count plot to visualize the data with the employees on the y axis The scoring categories as the hue, and the value range of their scores on the x axis.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

btraits = {'Behavioural Traits': ['Communicaiton', 'Teamwork', 'Leadership', 'Negotiation', 'Agreeableness'],
'James':[0,-2,0,-2,-2],
'John':[2,0,0,2,-1],
'Gary':[0,-1,0,1,-3],
'Raymond':[3,-5,0,1,0]}
df = pd.DataFrame(btraits)
df.set_index('Behavioural Traits', inplace=True)

sns.countplot(data=btraits, y='columns', hue='index')
2 Answers
  • I think you want a barplot for this data.
  • countplot shows the counts of observations in each categorical bin using bars.
  • The data needs to be stacked into a long form
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

btraits = {'Behavioural Traits': ['Communicaiton', 'Teamwork', 'Leadership', 'Negotiation', 'Agreeableness'],
           'James': [0,-2,0,-2,-2],
           'John': [2,0,0,2,-1],
           'Gary': [0,-1,0,1,-3],
           'Raymond': [3,-5,0,1,0]}

df = pd.DataFrame(btraits)
df.set_index('Behavioural Traits', inplace=True)

                    James  John  Gary  Raymond
Behavioural Traits                            
Communicaiton           0     2     0        3
Teamwork               -2     0    -1       -5
Leadership              0     0     0        0
Negotiation            -2     2     1        1
Agreeableness          -2    -1    -3        0

# stack the columns
dfs = df.stack().reset_index().rename(columns={'level_1': 'names', 0: 'values'})

   Behavioural Traits    names  values
0       Communicaiton    James       0
1       Communicaiton     John       2
2       Communicaiton     Gary       0
3       Communicaiton  Raymond       3
4            Teamwork    James      -2
5            Teamwork     John       0
6            Teamwork     Gary      -1
7            Teamwork  Raymond      -5
8          Leadership    James       0
9          Leadership     John       0
10         Leadership     Gary       0
11         Leadership  Raymond       0
12        Negotiation    James      -2
13        Negotiation     John       2
14        Negotiation     Gary       1
15        Negotiation  Raymond       1
16      Agreeableness    James      -2
17      Agreeableness     John      -1
18      Agreeableness     Gary      -3
19      Agreeableness  Raymond       0

countplot

sns.countplot(data=dfs, x='names', hue='Behavioural Traits')

enter image description here

barplot

sns.barplot(x='names', y='values', hue='Behavioural Traits', data=dfs)

enter image description here

Countplot basically returns count of occurrences.

you can try barplot instead for each categorical variable. Eg: sns.barplot(x=df.index,y='James',data=df)

Related