web-dev-qa-db-ja.com

シーボーンバープロットでのvalue_counts()のプロット

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

次に、さまざまな評判の値の数を示す棒グラフを取得します。私はもう試した:

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)

しかし、どちらも空のプロットを返します。

これを得るために私が何ができるか考えていますか?

17
AZhao

最新のseabornでは、countplot関数を使用できます。

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

barplotでこれを行うには、次のようなものが必要です。

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

xにカウントを渡しながら、'reputation'を列名としてyに渡すことはできません。 xの「評判」を渡すと、xの値として、df.reputationの-​​values(一意のものだけでなくすべて)が使用されます。シーボーンには、これらを数に合わせる方法はありません。したがって、一意の値をxとして渡し、カウントをyとして渡す必要があります。ただし、正しく一致するようにするには、value_countsを2回呼び出す(または一意の値とカウントの両方で他の並べ替えを行う)必要があります。

24
BrenBarn

countplotだけを使用しても、.value_counts()出力と同じ順序でバーを取得できます。

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