Один из способов сделать это - найти данные, которые соответствуют гладкой линии, которую kdeplot
добавляет к графику, и использовать ее координаты x и y.
В следующем коде предполагается, что на графике имеется только одна линия - с более чем одной строкой мы должны найти, какая линия соответствует линии kdeplot
.
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.interpolate import interp1d
# Get data
data = np.random.randn(6000)
# Compute statistics
median = np.median(data)
sigma = np.std(data)
low = median - sigma
hi = median + sigma
ax = sns.distplot(data)
# get the line that sns uses for kdeplot; at this point in the code
# there is only one line; if there are more we need to exract the correct
# one.
line = ax.lines[0].get_data()
# To get y for x=low, x=high and x=median we can interpolate the line data
ipf = interp1d(x=line[0], y=line[1])
ax.plot([low, low], [0, ipf(low)])
ax.plot([hi, hi], [0, ipf(hi)])
ax.plot([median, median], [0, ipf(median)]);
Мы можем использовать данные строки в качестве входных данных для fill_between
.
plt.fill_between(line[0], np.zeros(len(line[0])), line[1]);
Надеюсь, это поможет.