2015-11-16 9 views
5

:今パンダのデータフレームの特定の行をプロットする方法は?私はこの例のデータフレーム持って

 animal gender  name first second third 
0  dog  m  Ben  5  6  3 
1  dog  f Lilly  2  3  5 
2  dog  m  Bob  3  2  1 
3  cat  f  Puss  1  4  4 
4  cat  m Inboots  3  6  5 
5 wolf  f  Lady NaN  0  3 
6 wolf  m Summer  2  2  1 
7 wolf  m  Grey  4  2  3 
8 wolf  m  Wind  2  3  5 
9 lion  f  Elsa  5  1  4 
10 lion  m Simba  3  3  3 
11 lion  f  Nala  4  4  2 

を、私は、このためのいくつかの階層的なインデックスを必要とするかもしれない疑いがあるが、私はまだパンダにそこまで持っていません。しかし、私は本当にそれを使って(明らかにあまりにも進んだ)いくつかのことをする必要があり、それを行う方法を考え出していません。 基本的には、私は最後に、今の場合、プロット(おそらく散布図ですが、ラインはすぐに役立つでしょう)です。

1)私は4つのサブプロット - 各動物のサブプロットを1つずつ示したい。各サブプロットのタイトルは動物でなければなりません。

2)それぞれのサブプロットでは、与えられた行の数値(例えば、毎年生まれた子の数)、つまり 'first'、 'second'、 'third'の値をプロットしたいと思います。凡例に '名前'が表示されるラベルを付けます。各サブプロット(各動物)について、私は男性と女性を別々にプロットしたいと思います(例えば、青と雌で赤)。また、動物の平均値もプロットします。与えられた動物)を黒色にする。

3)ノート:exapleのために1,2,3に対してそれをプロットする - 私はplt.plot(np.array([1,2,3]),x,'b', np.array([1,2,3]),y,'r', np.array([1,2,3]), np.mean(x,y,axis=1),'k')場所のようなものをプロットしたいタイトル「犬との最初のサブプロットのために、例えばので、列番号、 を参照xは(最初のケースでは)5,6,3となり、この青いプロットの伝説は「ベン」と表示され、yは2,3,5となり、赤いプロットの伝説は「リリー」と黒プロットは3.5,4.5,4となり、伝説では(それはそれぞれのサブプロットに対して)「平均」であると定義します。

私は自分自身を十分に明確にしたいと思う。結果の図を見ることなく、想像するのが難しいかもしれないことを理解していますが...私がそれを作る方法を知っていれば、私は聞いていません...

結論としては、異なるレベルのデータフレームを通して、別々のサブプロット上に動物を持ち、オスとメスを比較し、サブプロットのそれぞれで平均値を比較します。

私の実際のデータフレームははるかに大きいので、理想的なケースでは、(プログラミングの初心者のために)堅牢だがわかりやすいソリューションが欲しいです。

サブプロットは、どのように見えるかのアイデアを取得するには、これはExcelの製品です:

briefly outlined plot

+1

df.groupby( 'animal')の 'for i、group:'を使用し、ループでプロットします。私は時間のために少し急いでいるので、答えはありません。 –

+0

私の質問は部分的にここに答えていると思う:http://stackoverflow.com/questions/14300137/making-matplotlib-scatter-plots-from-dataframes-in-pythons-pandas?rq=1しかし、まだ、私は完全ではないこれらの多次元データと特に行を描画する列ではなく、インデックス作成とループに自信を持って... – durbachit

+0

ありがとうChinmay! 時間があるときは、もっと説明してください。 (例えば、groupbyの2つの引数をどのように扱うか - 「何ですか」とグループ化されたオブジェクトの行をアドレス指定する方法) – durbachit

答えて

1

私はよくあなたが意味チャット理解するかどうか分かりません。 しかし、データフレームをlongform形式またはtidy formatに変換する必要があると考えています。これには、カテゴリ変数に基づいてプロットを作成することから始めて、多くの操作がその形式で簡単になります。きちんとした形式に変換するdfがあなたのデータフレームされた状態で

、ちょうど使用:

df2 = pd.melt(df, id_vars=["animal","gender","name"]) 
df2 
    animal gender  name variable value 
0 dog  m  Ben first 5.0 
1 dog  f Lilly first 2.0 
2 dog  m  Bob first 3.0 
3 cat  f  Puss first 1.0 
4 cat  m Inboots first 3.0 
... 
31 wolf  m  Grey third 3.0 
32 wolf  m  Wind third 5.0 
33 lion  f  Elsa third 4.0 
34 lion  m Simba third 3.0 
35 lion  f  Nala third 2.0 

そして、(ほぼ)すべてがちょうど次のようにseabornを使用し、簡単になる:次に

g = sns.factorplot(data=df2, # from your Dataframe 
        col="animal", # Make a subplot in columns for each variable in "animal" 
        col_wrap=2, # Maximum number of columns per row 
        x="variable", # on x-axis make category on the variable "variable" (created by the melt operation) 
        y="value", # The corresponding y values 
        hue="gender", # color according to the column gender 
        kind="strip", # the kind of plot, the closest to what you want is a stripplot, 
        legend_out=False, # let the legend inside the first subplot. 
        ) 

全体の美しさを向上させることができます:

g.set_xlabels("year") 
g.set_titles(template="{col_name}") # otherwise it's "animal = dog", now it's just "dog" 
sns.despine(trim=True) # trim the axis. 

stripplot seaborn

平均値を追加するには、手動で行う必要があります。ただし、データがさらにある場合は、ボックスプロットまたはバイオリンプロットも考慮する必要があります。ストリップポット、btw。

あなたのプロットをさらに改善するためにSeaborn's documentationをチェックしてください。

HTH

関連する問題