seaborn.kdeplot#

seaborn.kdeplot(data=None, *, x=None, y=None, hue=None, weights=None, palette=None, hue_order=None, hue_norm=None, color=None, fill=None, multiple='layer', common_norm=True, common_grid=False, cumulative=False, bw_method='scott', bw_adjust=1, warn_singular=True, log_scale=None, levels=10, thresh=0.05, gridsize=200, cut=3, clip=None, legend=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)#

カーネル密度推定を用いて、一変量または二変量の分布をプロットします。

カーネル密度推定(KDE)プロットは、ヒストグラムと同様に、データセット内の観測値の分布を視覚化するための方法です。KDEは、1つ以上の次元で連続的な確率密度曲線を使用してデータを表現します。

このアプローチの詳細については、ユーザーガイドを参照してください。

ヒストグラムと比較して、KDEは特に複数の分布を描画する場合、よりすっきりとして解釈しやすいプロットを生成できます。ただし、基になる分布が境界付きであるか滑らかでない場合、歪みを導入する可能性があります。ヒストグラムと同様に、表現の品質は適切な平滑化パラメーターの選択にも依存します。

パラメーター:
datapandas.DataFramenumpy.ndarray、マッピング、またはシーケンス

入力データ構造。名前付き変数に割り当てることができるベクトルのロングフォームコレクション、または内部的に形状変更されるワイドフォームデータセットのいずれか。

x、ydata内のベクトルまたはキー

x軸とy軸上の位置を指定する変数。

huedata内のベクトルまたはキー

プロット要素の色を決定するためにマッピングされるセマンティック変数。

weightsdata内のベクトルまたはキー

指定した場合、これらの値を使用してカーネル密度推定に重み付けを行います。

palette文字列、リスト、辞書、またはmatplotlib.colors.Colormap

hueセマンティックをマッピングするときに使用する色を選択するためのメソッド。文字列値はcolor_palette()に渡されます。リストまたは辞書の値はカテゴリカルマッピングを意味し、カラーマップオブジェクトは数値マッピングを意味します。

hue_order文字列のベクトル

hueセマンティックのカテゴリレベルの処理とプロットの順序を指定します。

hue_normタプルまたはmatplotlib.colors.Normalize

データ単位で正規化範囲を設定する値のペア、またはデータ単位から[0、1]間隔にマッピングするオブジェクトのいずれか。使用は数値マッピングを意味します。

colormatplotlib color

hueマッピングが使用されていない場合の単一色指定。それ以外の場合、プロットはmatplotlibのプロパティサイクルにフックしようとします。

fillboolまたはNone

Trueの場合、一変量密度曲線の下の領域、または二変量等高線の間の領域を塗りつぶします。Noneの場合、デフォルトはmultipleに依存します。

multiple{{“layer”, “stack”, “fill”}}

セマンティックマッピングがサブセットを作成するときに、複数の要素を描画する方法。一変量データでのみ関連します。

common_normbool

Trueの場合、すべての密度の下の合計面積が1になるように、各条件付き密度を観測数でスケーリングします。それ以外の場合は、各密度を個別に正規化します。

common_gridbool

Trueの場合、各カーネル密度推定に同じ評価グリッドを使用します。一変量データでのみ関連します。

cumulativebool、オプション

Trueの場合、累積分布関数を推定します。scipyが必要です。

bw_method文字列、スカラー、または呼び出し可能オブジェクト(任意)

使用する平滑化帯域幅を決定する方法。 scipy.stats.gaussian_kde に渡されます。

bw_adjust数値(任意)

bw_methodを使用して選択された値を乗算的にスケーリングする係数。大きくすると、曲線がより滑らかになります。注釈を参照してください。

warn_singularbool

Trueの場合、分散がゼロのデータの密度を推定しようとすると警告を発行します。

log_scaleboolまたは数値、またはboolまたは数値のペア

軸のスケールを対数に設定します。単一の値は、プロット内の数値軸のデータ軸を設定します。値のペアは、各軸を独立して設定します。数値は、必要な底(デフォルトは10)として解釈されます。NoneまたはFalseの場合、seabornは既存のAxesスケールに従います。

levels整数またはベクトル

描画する等高線の数または値。ベクトルの引数は、[0, 1]で増加する値である必要があります。レベルは密度の等しい割合に対応します。たとえば、確率質量の20%は、0.2で描画された等高線の下に位置します。二変量データでのみ関連します。

thresh[0, 1]の数値

等高線を描画する最小の等割合レベル。levelsがベクトルの場合は無視されます。二変量データでのみ関連します。

gridsize整数

評価グリッドの各次元のポイント数。

cut数値(任意)

平滑化帯域幅を乗算した係数で、評価グリッドが極端なデータポイントをどれだけ超えて拡張するかを決定します。0に設定すると、データ制限で曲線が切り捨てられます。

clip数値のペアまたはNone、またはそのようなペアのペア

これらの制限外で密度を評価しないでください。

legendbool

Falseの場合、セマンティック変数の凡例を抑制します。

cbarbool

Trueの場合、二変量プロットでカラーマッピングを注釈するカラーバーを追加します。注意:現在、hue変数を含むプロットはうまくサポートされていません。

cbar_axmatplotlib.axes.Axes

カラーバーの既存の軸。

cbar_kws辞書

matplotlib.figure.Figure.colorbar()に渡される追加のパラメーター。

axmatplotlib.axes.Axes

プロットの既存の軸。それ以外の場合は、内部的に matplotlib.pyplot.gca() を呼び出します。

kwargs

その他のキーワード引数は、次のmatplotlib関数のいずれかに渡されます。

戻り値:
matplotlib.axes.Axes

プロットを含むmatplotlib軸。

参考

displot

分布プロット関数への図レベルのインターフェース。

histplot

オプションの正規化または平滑化を使用した、ビン化されたカウントのヒストグラムをプロットします。

ecdfplot

経験累積分布関数をプロットします。

jointplot

一変量の周辺分布を持つ二変量プロットを描画します。

violinplot

カーネル密度推定を使用して強化された箱ひげ図を描画します。

注釈

帯域幅、または平滑化カーネルの標準偏差は、重要なパラメータです。帯域幅の指定ミスは、データの歪んだ表現を生成する可能性があります。ヒストグラムのビン幅の選択と同様に、過度に平滑化された曲線は分布の真の特徴を消去する可能性があり、平滑化不足の曲線はランダムな変動から偽の特徴を作成する可能性があります。デフォルトの帯域幅を設定する経験則は、真の分布が滑らかで、単峰性で、ほぼ釣鐘型の場合に最適に機能します。bw_adjustを使用して平滑化の量を増減することで、デフォルトの動作をチェックすることをお勧めします。

平滑化アルゴリズムはガウスカーネルを使用しているため、推定された密度曲線は、特定のデータセットにとって意味をなさない値まで拡張できます。たとえば、曲線は、自然に正のデータを平滑化するときに、負の値の上に描画される場合があります。cutおよびclipパラメーターを使用して曲線の範囲を制御できますが、自然な境界に近い観測値が多いデータセットは、別の視覚化方法の方が適している場合があります。

データセットが自然に離散的であるか、「スパイク状」(同じ値の繰り返し観測が多い)である場合にも同様の考慮事項が適用されます。カーネル密度推定は常に滑らかな曲線を生成しますが、これはこれらの状況では誤解を招く可能性があります。

密度軸の単位は、混乱の一般的な原因です。カーネル密度推定は確率分布を生成しますが、各点での曲線の高さは、確率ではなく密度を示します。確率は、範囲全体の密度を積分することによってのみ取得できます。曲線は、可能なすべての値の積分が1になるように正規化されます。つまり、密度軸のスケールはデータ値に依存します。

x軸に沿って一変量分布をプロットします

tips = sns.load_dataset("tips")
sns.kdeplot(data=tips, x="total_bill")
../_images/kdeplot_1_0.png

データ変数をy軸に割り当てることで、プロットを反転します

sns.kdeplot(data=tips, y="total_bill")
../_images/kdeplot_3_0.png

ワイド形式のデータセットの各列の分布をプロットします

iris = sns.load_dataset("iris")
sns.kdeplot(data=iris)
../_images/kdeplot_5_0.png

平滑化を少なくします

sns.kdeplot(data=tips, x="total_bill", bw_adjust=.2)
../_images/kdeplot_7_0.png

平滑化を増やしますが、極端なデータポイントを超えて平滑化しないでください

ax= sns.kdeplot(data=tips, x="total_bill", bw_adjust=5, cut=0)
../_images/kdeplot_9_0.png

2番目の変数の色分けマッピングを使用して、条件付き分布をプロットします

sns.kdeplot(data=tips, x="total_bill", hue="time")
../_images/kdeplot_11_0.png

条件付き分布を「スタック」します

sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="stack")
../_images/kdeplot_13_0.png

グリッドの各値でスタックされた分布を正規化します

sns.kdeplot(data=tips, x="total_bill", hue="time", multiple="fill")
../_images/kdeplot_15_0.png

累積分布関数を推定し、各サブセットを正規化します

sns.kdeplot(
    data=tips, x="total_bill", hue="time",
    cumulative=True, common_norm=False, common_grid=True,
)
../_images/kdeplot_17_0.png

重みを使用して、集計データから分布を推定します

tips_agg = (tips
    .groupby("size")
    .agg(total_bill=("total_bill", "mean"), n=("total_bill", "count"))
)
sns.kdeplot(data=tips_agg, x="total_bill", weights="n")
../_images/kdeplot_19_0.png

対数スケールでデータ変数をマップします

diamonds = sns.load_dataset("diamonds")
sns.kdeplot(data=diamonds, x="price", log_scale=True)
../_images/kdeplot_21_0.png

数値の色分けマッピングを使用します

sns.kdeplot(data=tips, x="total_bill", hue="size")
../_images/kdeplot_23_0.png

プロットの外観を変更します

sns.kdeplot(
   data=tips, x="total_bill", hue="size",
   fill=True, common_norm=False, palette="crest",
   alpha=.5, linewidth=0,
)
../_images/kdeplot_25_0.png

二変量分布をプロットします

geyser = sns.load_dataset("geyser")
sns.kdeplot(data=geyser, x="waiting", y="duration")
../_images/kdeplot_27_0.png

条件付き分布を示すために、色セマンティックで3番目の変数をマップします

sns.kdeplot(data=geyser, x="waiting", y="duration", hue="kind")
../_images/kdeplot_29_0.png

塗りつぶされた等高線を表示します

sns.kdeplot(
    data=geyser, x="waiting", y="duration", hue="kind", fill=True,
)
../_images/kdeplot_31_0.png

分布のカバレッジが少ない、等高線レベルを少なく表示します

sns.kdeplot(
    data=geyser, x="waiting", y="duration", hue="kind",
    levels=5, thresh=.2,
)
../_images/kdeplot_33_0.png

別のカラーマップを使用して、軸範囲を滑らかな分布で塗りつぶします

sns.kdeplot(
    data=geyser, x="waiting", y="duration",
    fill=True, thresh=0, levels=100, cmap="mako",
)
../_images/kdeplot_35_0.png