我有两个变量

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'})

我认为“阴影”参数可能是 fit_kws 参数的一部分,但我还没有让它起作用。

另一种选择是使用 ax.fill()

最佳答案

是的,与 shade 不同, fit_kws 不支持 kde_kws 参数。但是正如您所猜想的那样,我们可以使用 ax.fill_between() 填充两条曲线下方的区域。我们必须从 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)

结果如下所示:
python - 如何在seaborn分布图中填充曲线下的区域-LMLPHP

关于python - 如何在seaborn分布图中填充曲线下的区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47645291/

10-12 22:15