web-dev-qa-db-ja.com

海の分布図の曲線下の領域を塗りつぶす方法

2つの変数があります

_x = [1.883830, 7.692308,8.791209, 9.262166]
y = [5.337520, 4.866562, 2.825746, 6.122449]
_

そして、matplotlibにラップされたseabornを使用してガウス分布に適合させたいです。 _sns.distplot_関数がこれを行うための最良の方法のようですが、曲線の下の領域を埋める方法がわかりません。助けて?

_fig, ax = plt.subplots(1)
sns.distplot(x,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="red", label="2016", fit_kws={'color':'red'});
sns.distplot(y,kde_kws={"shade":True}, kde=False, fit=stats.gamma, hist=None, color="blue", label="2017", fit_kws={'color':'blue'})
_

"shade"引数は_fit_kws_引数の一部である可能性があると思いますが、これは機能していません。

別のオプションは、ax.fill()

9
JAG2024

はい、shade引数は、_fit_kws_とは異なり、_kde_kws_ではサポートされていません。しかし、ご想像どおり、ax.fill_between()を使用して2つの曲線の下の領域を塗りつぶすことができます。 axオブジェクトとそのx-yデータから線を取得し、それを使用して曲線の下の領域を塗りつぶす必要があります。ここに例があります。

_import numpy as np
import seaborn as sns
import scipy.stats as stats
import matplotlib.pyplot as plt

x = [1.883830, 7.692308,8.791209, 9.262166]
y = [5.337520, 4.866562, 2.825746, 6.122449]
ax = sns.distplot(x, fit_kws={"color":"red"}, kde=False,
        fit=stats.gamma, hist=None, label="label 1");
ax = sns.distplot(y, fit_kws={"color":"blue"}, kde=False,
        fit=stats.gamma, hist=None, label="label 2");

# Get the two lines from the axes to generate shading
l1 = ax.lines[0]
l2 = ax.lines[1]

# Get the xy data from the lines so that we can shade
x1 = l1.get_xydata()[:,0]
y1 = l1.get_xydata()[:,1]
x2 = l2.get_xydata()[:,0]
y2 = l2.get_xydata()[:,1]
ax.fill_between(x1,y1, color="red", alpha=0.3)
ax.fill_between(x2,y2, color="blue", alpha=0.3)

plt.show(block=False)
_

結果を以下に示します。 enter image description here

11
user6764549