2017-02-27 10 views
1

enter image description hereプロット正規曲線とヒストグラムとseabornでビンに名前を付ける

こんにちはすべて、私は別のデータセットでseabornを使用して、プロットの以下のタイプをプロットしようとしています。問題は、ヒストグラムタイプが使用されているときに、カーネルカーブを提供していてもビン(2-2.5,2.5-3..etcなど)の名前を付けることができない場合です。バープロットは画像のように通常の曲線を描画する機能を持っていません。画像は少し知識があるSPSS統計パッケージを使用しているようです。

後は

df = pd.DataFrame({'cat': ['1-1.5', '1.5-2', '2-2.5','2.5-3','3-3.5','3.5-4','4-4.5','4.5-5'],'val': [0,0,1,7,7,33,17,10]}) 
ax = sns.barplot(y = 'val', x = 'cat', 
       data = df) 
ax.set(xlabel='Categories', ylabel='Frequency') 
plt.show() 

enter image description here

+0

私は、すでに蓄積されたデータをビンに入れておけば、ヒストグラムをKDEでどのようにプロットするのですか?既に「正常なカーブ」がある場合、それは簡単でしょう。そうでなければ、そのカーブはどうなるでしょうか? – ImportanceOfBeingErnest

+0

実際には、通常のカーブは完璧な鐘型のものを意味するわけではありません。データに応じて歪む可能性があります。 (この場合、それは間違いなく歪んでおり、正常ではありません)。はい、質問はあなたが示唆したとおりに変更する必要があり、それは私が尋ねる質問とまったく同じです。 :) –

答えて

0

だから問題は、元のデータを持っていない、もちろんですが、(私は、コードを添付している)私が得ることができる最も近いものであるデータというすでにbinnedされています。このビニングを元に戻し、一連の生データで開始することができます。その後、再度ヒストグラムを実行し、デフォルトではKDEプロットも表示するsns.distplotを使用します。

import seaborn as sns 
import matplotlib.pyplot as plt 
import numpy as np 

cat = ['1-1.5', '1.5-2', '2-2.5','2.5-3','3-3.5','3.5-4','4-4.5','4.5-5'] 
val = [0,0,1,7,7,33,17,10] 
data = [] 
for i in range(len(cat)): 
    data.extend([1.25+i*0.5]*val[i]) 
bins = np.arange(1,5.5, 0.5) 

ax = sns.distplot(data, bins=bins, hist_kws= dict(edgecolor="k")) 
ax.set(xlabel='Categories', ylabel='Frequency') 
ax.set_xticks(bins[:-1]+0.25) 
ax.set_xticklabels(cat) 

plt.show() 

enter image description here

曲線の滑らかさを設定するにはKDEの機能にbwキーワード引数を使用します。例えば。 bw=0.5

enter image description here

を生成sns.distplot(data, bins=bins, kde_kws=dict(bw=0.5), hist_kws= dict(edgecolor="k"))はまた違いを見るためにbw=0.1bw=0.25bw=0.35bw=2を試してみてください。

+0

ありがとう!これは私が探していた答えでした。私は、データセットのサイズについては、平滑性プロパティ0.5を持っていることを確認してください。さもなければ、カーブは非常に異常ですか、過度に言うことができますか? –

関連する問題