По-моему, ни один из предыдущих методов не делает полное (и строгий) задание графического изображения эмпирического CDF, который был исходным вопросом автора вопроса. Я отправляю свое предложение для любых потерянных и сочувствующих душ.
Мое предложение имеет следующее: 1) это считает эмпирический CDF определенным как в первом выражении здесь , т.е. как в A. W. Van der Waart Асимптотическая статистика (1998), 2) это явно показывает поведение шага функции, 3) это явно показывает, что эмпирический CDF непрерывен справа путем показа меток для разрешения разрывов, 4) это расширяет нуль, и каждый оценивает в экстремальные значения до пользовательских полей. Я надеюсь, что это помогает кому-то:
def plot_cdf( data, xaxis = None, figsize = (20,10), line_style = 'b-',
ball_style = 'bo', xlabel = r"Random variable $X$", ylabel = "$N$-samples
empirical CDF $F_{X,N}(x)$" ):
# Contribution of each data point to the empirical distribution
weights = 1/data.size * np.ones_like( data )
# CDF estimation
cdf = np.cumsum( weights )
# Plot central part of the CDF
plt.figure( figsize = (20,10) )
plt.step( np.sort( a ), cdf, line_style, where = 'post' )
# Plot valid points at discontinuities
plt.plot( np.sort( a ), cdf, ball_style )
# Extract plot axis and extend outside the data range
if not xaxis == None:
(xmin, xmax, ymin, ymax) = plt.axis( )
xmin = xaxis[0]
xmax = xaxis[1]
plt.axis( [xmin, xmax, ymin, ymax] )
else:
(xmin,xmax,_,_) = plt.axis()
plt.plot( [xmin, a.min(), a.min()], np.zeros( 3 ), line_style )
plt.plot( [a.max(), xmax], np.ones( 2 ), line_style )
plt.xlabel( xlabel )
plt.ylabel( ylabel )