web-dev-qa-db-fra.com

traçage value_counts () dans barplot seaborn

J'ai du mal à obtenir un barplot à Seaborn. Voici mes données reproductibles:

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

Ensuite, je veux obtenir un graphique à barres montrant les nombres de valeurs de réputation différente. J'ai essayé:

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

et

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

mais les deux renvoient des parcelles vides.

Une idée de ce que je peux faire pour l'obtenir?

17
AZhao

Dans le dernier Seaborn, vous pouvez utiliser la fonction countplot:

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

Pour le faire avec barplot, vous auriez besoin de quelque chose comme ceci:

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

Vous ne pouvez pas passer 'reputation' comme nom de colonne à x tout en transmettant également les nombres dans y. Passer la "réputation" pour x utilisera les valeurs de df.reputation (tous, pas seulement les uniques) comme valeurs x, et seaborn n'a aucun moyen de les aligner avec les nombres. Vous devez donc passer les valeurs uniques comme x et les comptes comme y. Mais vous devez appeler value_counts deux fois (ou effectuez un autre tri à la fois sur les valeurs uniques et les nombres) pour vous assurer qu'ils correspondent bien.

24
BrenBarn

En utilisant simplement countplot, vous pouvez également obtenir les barres dans le même ordre que la sortie de .value_counts():

seaborn.countplot(data=df, x='reputation', order=df.reputation.value_counts().index)
2
Jim K.