scipy.stats.probplot(x, sparams=(), dist='norm', fit=True, plot=None)[source]

Calculate quantiles for a probability plot of sample data against a specified theoretical distribution.

probplot optionally calculates a best-fit line for the data and plots the results using Matplotlib or a given plot function.

Parameters :

x : array_like

Sample/response data from which probplot creates the plot.

sparams : tuple, optional

Distribution-specific shape parameters (location(s) and scale(s)).

dist : str, optional

Distribution function name. The default is ‘norm’ for a normal probability plot.

fit : bool, optional

Fit a least-squares regression (best-fit) line to the sample data if True (default).

plot : object, optional

If given, plots the quantiles and least squares fit. plot is an object with methods “plot”, “title”, “xlabel”, “ylabel” and “text”. The matplotlib.pyplot module or a Matplotlib axes object can be used, or a custom object with the same methods. By default, no plot is created.

Returns :

(osm, osr) : tuple of ndarrays

Tuple of theoretical quantiles (osm, or order statistic medians) and ordered responses (osr).

(slope, intercept, r) : tuple of floats, optional

Tuple containing the result of the least-squares fit, if that is performed by probplot. r is the square root of the coefficient of determination. If fit=False and plot=None, this tuple is not returned.


Even if plot is given, the figure is not shown or saved by probplot; or plot.savefig('figname.png') should be used after calling probplot.


>>> import scipy.stats as stats
>>> nsample = 100
>>> np.random.seed(7654321)

A t distribution with small degrees of freedom:

>>> ax1 = plt.subplot(221)
>>> x = stats.t.rvs(3, size=nsample)
>>> res = stats.probplot(x, plot=plt)

A t distribution with larger degrees of freedom:

>>> ax2 = plt.subplot(222)
>>> x = stats.t.rvs(25, size=nsample)
>>> res = stats.probplot(x, plot=plt)

A mixture of 2 normal distributions with broadcasting:

>>> ax3 = plt.subplot(223)
>>> x = stats.norm.rvs(loc=[0,5], scale=[1,1.5], size=(nsample/2.,2)).ravel()
>>> res = stats.probplot(x, plot=plt)

A standard normal distribution:

>>> ax4 = plt.subplot(224)
>>> x = stats.norm.rvs(loc=0, scale=1, size=nsample)
>>> res = stats.probplot(x, plot=plt)

Previous topic


Next topic