pandas 在海运条形图中绘制value_counts()

ca1c2owp  于 2023-03-16  发布在  其他
关注(0)|答案(3)|浏览(181)

我在海运中遇到了麻烦,这是我的可复制数据:

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'})

然后,我想得到一个条形图,显示不同声誉的价值计数。

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

以及

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

但都返回空白图。
你知道我该怎么做才能拿到这个吗?

xmd2e60i

xmd2e60i1#

在最新的seaborn中,可以使用countplot函数:

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

要使用barplot执行此操作,您需要如下代码:

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

不能将'reputation'作为列名传递给x,同时还要传递y中的计数。为x传递“reputation”将使用df.reputation的 *values(所有的,不仅仅是唯一的)作为x值,seaborn无法将这些值与计数值对齐,因此需要将唯一值作为x传递,将计数值作为y传递,但是需要调用value_counts两次(或者对唯一值和计数进行一些其他排序)以确保它们正确匹配。

fcg9iug3

fcg9iug32#

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

seaborn.countplot(data=df, x='reputation', order=df.reputation.value_counts().index)
laik7k3q

laik7k3q3#

answer所示,sns.countplot是一个很好的选项,但它是一个轴级图,有ax=,需要其他matplotlib方法来调整大小。

import seaborn as sns
import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 4))
sns.countplot(data=df, x='reputation', ax=ax)

或者,将sns.catplotkind='count'配合使用,kind='count'height=aspect=的图形级别图。

import seaborn as sns

g = sns.catplot(data=df, kind='count', x='reputation', height=4, aspect=2)

相关问题