7
votes

Equivalent python pour Matlab Normplot?

Y a-t-il une fonction équivalente python similaire à NormPlot code> de MATLAB? Peut-être dans Matplotlib?

MATLAB Syntaxe: P>

import numpy as np
import matplotlib.pyplot as plt

data =[-11.83,-8.53,-2.86,-6.49,-7.53,-9.74,-9.44,-3.58,-6.68,-13.26,-4.52]
plot_percentiles = range(0, 110, 10) 

x = np.percentile(data, plot_percentiles)
plt.plot(x, plot_percentiles, 'ro-')
plt.xlabel('Value')
plt.ylabel('Probability')  
plt.show() 


0 commentaires

4 Réponses :


2
votes

Je suis assez certain que Matplotlib ne fournit rien de tel.

Il est possible de faire, bien sûr, mais vous devrez reférer vos données et modifier vos ticks / étiquettes d'axe Y pour correspondre, ou si vous envisagez de le faire souvent, CODE peut-être une nouvelle échelle qui Peut être appliqué aux axes MATPLOLIB, comme dans cet exemple: http://matplotlib.sourceforge.net /examples/api/custom_scale_example.html .


0 commentaires



7
votes

Une réponse tardive, mais je viens de trouver le même problème et j'ai trouvé une solution, cela vaut la peine d'être partagé. Je suppose.

Comme Joris a souligné que la fonction ProbPlot est équivalente à la normalisation, mais la distribution résultante est sous la forme de la fonction de densité cumulée. SciPy.Stats propose également une fonction pour convertir ces valeurs. p>

CDF -> centile p> xxx pré>

centile -> CDF p> xxx pré>

Par exemple: P>

from scipy import stats
import matplotlib.pyplot as plt

nsample=500

#create list of random variables
x=stats.t.rvs(100, size=nsample)

# Calculate quantiles and least-square-fit curve
(quantiles, values), (slope, intercept, r) = stats.probplot(x, dist='norm')

#plot results
plt.plot(values, quantiles,'ob')
plt.plot(quantiles * slope + intercept, quantiles, 'r')

#define ticks
ticks_perc=[1, 5, 10, 20, 50, 80, 90, 95, 99]

#transfrom them from precentile to cumulative density
ticks_quan=[stats.norm.ppf(i/100.) for i in ticks_perc]

#assign new ticks
plt.yticks(ticks_quan,ticks_perc)

#show plot
plt.grid()
plt.show()


0 commentaires