Skip to content Skip to sidebar Skip to footer

Plot Cdf With Confidence Interval Using Seaborn

I'm trying to plot a CDF from multiple simulation runs using Seaborn. I created a very simple code to emulate my results: import numpy as np import pandas as pd import matplotlib.p

Solution 1:

You may use fill_between to fill between two curves. Now here the problem is that the kde support would be different for the three curves. Obtaining a common kde support will require to calculate the cdf manually. This could be done as follows.

import numpy as np
from scipy import stats
import matplotlib.pyplot as plt


defcdf(data, limits="auto", npoints=600):
    kde = stats.gaussian_kde(data)
    bw = kde.factor
    if limits == "auto":
        limits = (data.min(), data.max())
    limits = (limits[0]-bw*np.diff(limits)[0],
              limits[1]+bw*np.diff(limits)[0])
    x = np.linspace(limits[0], limits[1], npoints)
    y = [kde.integrate_box(x[0],x[i]) for i inrange(len(x))]
    return x, np.array(y)


d1 = np.random.randint(14, 86, 1000)   
d2 = np.random.randint(10, 100, 1000) 
d3 = np.random.randint(0, 90, 1000) 

mini = np.min((d1.min(), d2.min(), d3.min()))
maxi = np.max((d1.max(), d2.max(), d3.max()))

x1,y1 = cdf(d1, limits=(mini, maxi))
x2,y2 = cdf(d2, limits=(mini, maxi))
x3,y3 = cdf(d3, limits=(mini, maxi))

y = np.column_stack((y1, y2, y3))
ymin = np.min(y, axis=1)
ymax = np.max(y, axis=1)  

f, ax = plt.subplots()

ax.plot(x1,y1)
ax.plot(x2,y2)
ax.plot(x3,y3)

ax.fill_between(x1, ymin, ymax, color="turquoise", alpha=0.4, zorder=0)

plt.show()

enter image description here

Post a Comment for "Plot Cdf With Confidence Interval Using Seaborn"