Y a-t-il une fonction équivalente python similaire à MATLAB Syntaxe: P> NormPlot code> de MATLAB?
Peut-être dans Matplotlib?
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()
4 Réponses :
Je suis assez certain que Matplotlib ne fournit rien de tel. p>
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 . P>
Peut-être que vous pouvez utiliser la fonction Calculer les quantiles pour une probabilité
Terrain de données d'échantillonnage contre un
Distribution théorique spécifiée. P>
ProbPlot calcule éventuellement un
Ligne optimale pour les données et les parcelles
les résultats en utilisant matplotlib ou a
Fonction de parcelle donnée. P>
blockQuote>
http://docs.cipy.org/ DOC / SCIPY / Référence / généré / SCIPY.STATS.PROBPLOT.HTML P>
mais ne résout pas votre problème de l'échelle différente de l'axe de Y. p> probsif code> de SCIPY (
sciped.stats code>), cela me semble être un équivalent pour MATLABS Normplot: P>
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> centile -> CDF p> 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()