在seaborn barplot中绘制value_counts()

AZh*_*hao 13 python pandas seaborn

我无法在海边拍摄一个画布.这是我可重复的数据:

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'})
Run Code Online (Sandbox Code Playgroud)

然后我想得到一个条形图,显示不同声誉的价值计数.我试过了:

sns.barplot(x = 'reputation', y = df['reputation'].value_counts(), data = df, ci = None)
Run Code Online (Sandbox Code Playgroud)

sns.barplot(x = 'reputation', y = df['reputation'].value_counts().values, data = df, ci = None)
Run Code Online (Sandbox Code Playgroud)

但两者都返回空白图.

知道我能做些什么才能得到这个吗?

Bre*_*arn 21

在最新的seaborn中,您可以使用以下countplot功能:

seaborn.countplot(x='reputation', data=df)
Run Code Online (Sandbox Code Playgroud)

要做到这一点,barplot你需要这样的东西:

seaborn.barplot(x=df.reputation.value_counts().index, y=df.reputation.value_counts())
Run Code Online (Sandbox Code Playgroud)

在传递计数时,您不能'reputation'作为列名x传递y.过客"声誉"为x将使用df.reputation作为(所有的人,不只是那些独特)x的值,seaborn没有办法与计数对准这些.所以你需要传递唯一值x和计数y.但是你需要调用value_counts两次(或者对唯一值和计数进行一些其他排序)以确保它们匹配正确.


Jim*_* K. 8

仅使用countplot您也可以按照与.value_counts()输出相同的顺序获取条形:

seaborn.countplot(data=df, x='reputation', order=df.reputation.value_counts().index)
Run Code Online (Sandbox Code Playgroud)