2

いくつかのデータが与えられた場合:

pt = pd.DataFrame({'alrmV':[000,000,000,101,101,111,111],
                   'he':[e,e,e,e,h,e,e],
                   'inc':[0,0,0,0,0,1,1]})

行と列で区切られた棒グラフを作成したいと思います。

g = sns.FacetGrid(pt, row='inc', col='he', margin_titles=True)
g.map( sns.barplot(pt['alrmV']), color='steelblue')

これはうまくいきますが、どうすれば追加できますか:

  1. 順序付けられた x 軸
  2. Top-two-by-countalrmVタイプのみを表示する

上位 2 つのカウント タイプを表示する順序付けられた x 軸を取得するために、このグループ化を試してみましたが、ファセット グリッドに入れることができませんでした。

grouped = pt.groupby( ['he','inc'] )
grw= grouped['alrmV'].value_counts().fillna(0.) #.unstack().fillna(0.)
grw[:2].plot(kind='bar')

FacetGrid を使用すると、スライスによって表示される合計数が制限されます

g.map(sns.barplot(pt['alrmV'][:10]), color='steelblue')

では、行と列で区切られ、順序付けられ、上位 2 つのカウントのみを表示する棒グラフを取得するにはどうすればよいでしょうか。

4

1 に答える 1

4

提供されたデータを使用してサンプルを取得できなかったため、サンプル データセットの 1 つを使用して説明します。

import seaborn as sns
tips = sns.load_dataset("tips")

棒グラフの変数として使用して、列、行でsexプロットを作成します。上位 2 日間を順番に取得するには、次のようにします。smokerdayx

top_two_ordered = tips.day.value_counts().order().index[-2:]

x_order次に、このリストを の引数に渡すことができますbarplot

ここで直接使用できますが、関数FacetGridを使用する方がおそらく簡単です。factorplot

g = sns.factorplot("day", col="sex", row="smoker",
               data=tips, margin_titles=True, size=3,
               x_order=top_two_ordered)

描画するもの:

ここに画像の説明を入力

あなたが提案したことを正確に行うことはお勧めしませんが(各ファセットの異なる x 値のバーをプロットする)、次のようなことを行うことで達成できます

g = sns.FacetGrid(tips, col="sex", row="smoker", sharex=False)

def ordered_barplot(data, **kws):
    x_order = data.day.value_counts().order().index[-2:]
    sns.barplot(data.day, x_order=x_order)

g.map_dataframe(ordered_barplot)

作る

ここに画像の説明を入力

于 2014-04-23T18:11:46.703 に答える