web-dev-qa-db-ja.com

Seaborn:相対頻度のdistplot()

研究プロジェクトのために、Seabornでいくつかのヒストグラムを作成しようとしています。相対度数に対するy軸と、-180から180までのx軸を実行したいと思います。ヒストグラムの1つに対して持っているコードは次のとおりです。

import pandas as pd
from matplotlib import pyplot as plt
%matplotlib inline
import seaborn as sns

df = pd.read_csv('sample.csv', index_col=0)

x = df.Angle
sns.distplot(x, kde=False);

この出力: seaborn frequency plot

出力をカウントではなく周波数に変換する方法がわかりません。周波数出力を取得するためにさまざまな種類のグラフを試しましたが、役に立ちませんでした。 周波数を使用したカウントプロット (ただし別の関数を使用)を求めているように見えるこの質問にも遭遇しました。ガイドとして使用しようとしましたが、失敗しました。どんな助けでも大歓迎です。私はこのソフトウェアとPython)に非常に慣れていません。

私のデータは次のようになり、ダウンロードできます: sample data

4
Melanie Shebel

特に初心者としては、物事をシンプルに保つようにしてください。あなたは番号のリストを持っています

a = [-0.126,1,9,72.3,-44.2489,87.44]

ヒストグラムを作成します。ヒストグラムを定義するには、いくつかのビンが必要です。したがって、-180〜180の範囲を幅20のビンに分割するとします。

import numpy as np
bins = np.arange(-180,181,20)

ビンのカウントを返すnumpy.histogramを使用して、ヒストグラムを計算できます。

hist, edges = np.histogram(a, bins)

相対頻度は、各ビンの数をイベントの総数で割ったものです。

freq = hist/float(hist.sum())

したがって、量freqは、棒グラフとしてプロットする相対度数です。

import matplotlib.pyplot as plt
plt.bar(bins[:-1], freq, width=20, align="Edge", ec="k" )

これにより、次のプロットが作成され、そこから次のように読み取ることができます。値の33%が0から20の範囲にあります。

enter image description here

完全なコード:

import numpy as np
import matplotlib.pyplot as plt

a = [-0.126,1,9,72.3,-44.2489,87.44]

bins = np.arange(-180,181,20)

hist, edges = np.histogram(a, bins)
freq = hist/float(hist.sum())

plt.bar(bins[:-1],freq,width=20, align="Edge", ec="k" )

plt.show()

Countから頻度(またはsnsが参照する場合は密度)に変換できる_sns.displot_引数があります。通常はFalseなので、Trueで有効にする必要があります。あなたの場合:

sns.distplot(x, kde=False, norm_hist=True)

次に、x軸を-180から180まで実行する場合は、次を使用します。

plt.xlim(-180,180)

Seaborn Docs から:

_norm_hist : bool, optional

If True, the histogram height shows a density rather than a count. This is implied if a KDE or fitted density is plotted.
_
8
Thomas Matthew