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?
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.
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)