Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

plotting value_counts() in seaborn barplot

I'm having trouble getting a barplot in seaborn. Here's my reproducible data:

people = ['Hannah', 'Bethany', 'Kris', 'Alex', 'Earl', 'Lori'] reputation = ['awesome', 'cool', 'brilliant', 'meh', 'awesome', 'cool'] dictionary = dict(zip(people, reputation)) df = pd.DataFrame(dictionary.values(), dictionary.keys()) df = df.rename(columns={0:'reputation'}) 

Then I want to get a bar plot showing the value counts of different reputation. I've tried:

sns.barplot(x = 'reputation', y = df['reputation'].value_counts(), data = df, ci = None) 

and

sns.barplot(x = 'reputation', y = df['reputation'].value_counts().values, data = df, ci = None) 

but both return blank plots.

Any idea what I can do to get this?

like image 203
AZhao Avatar asked Jul 16 '15 16:07

AZhao


1 Answers

In the latest seaborn, you can use the countplot function:

seaborn.countplot(x='reputation', data=df) 

To do it with barplot you'd need something like this:

seaborn.barplot(x=df.reputation.value_counts().index, y=df.reputation.value_counts()) 

You can't pass 'reputation' as a column name to x while also passing the counts in y. Passing 'reputation' for x will use the values of df.reputation (all of them, not just the unique ones) as the x values, and seaborn has no way to align these with the counts. So you need to pass the unique values as x and the counts as y. But you need to call value_counts twice (or do some other sorting on both the unique values and the counts) to ensure they match up right.

like image 177
BrenBarn Avatar answered Sep 27 '22 21:09

BrenBarn