web-dev-qa-db-fra.com

Définition d'une fréquence relative dans un histogramme matplotlib

J'ai des données comme liste de flotteurs et je tiens à le tracer comme histogramme. La fonction HIST () fait parfaitement le travail pour tracer l'histogramme absolu. Cependant, je ne peux pas comprendre comment le représenter dans un format de fréquence relative - je voudrais l'avoir comme une fraction ou idéalement en pourcentage sur l'axe des Y.

Voici le code:

fig = plt.figure()
ax = fig.add_subplot(111)
n, bins, patches = ax.hist(mydata, bins=100, normed=1, cumulative=0)
ax.set_xlabel('Bins', size=20)
ax.set_ylabel('Frequency', size=20)
ax.legend

plt.show()

Je pensais que la normale = 1 argument le ferait, mais cela donne des fractions trop élevées et sont parfois supérieures à 1. Ils semblent aussi dépendre de la taille de la corbeille, comme s'ils ne sont pas normalisés par la taille de la corbeille ou quelque chose du genre. Néanmoins, quand je mets cumulatif = 1, il résume joliment jusqu'à 1. Donc, où est la capture? Au fait, lorsque je nourris les mêmes données dans l'origine et l'intrigue, cela me donne des fractions parfaitement correctes. Merci!

25
user1278140

Parce que l'option NORMED de HIS renvoie la densité des points, E.G DN/DX

Ce dont vous avez besoin est quelque chose comme ça:

 # assuming that mydata is an numpy array
 ax.hist(mydata, weights=np.zeros_like(mydata) + 1. / mydata.size)
 # this will give you fractions
37
sega_sai

Ou vous pouvez utiliser set_major_formatter Pour régler l'échelle de l'axe Y, comme suit:

from matplotlib import ticker as tick

def adjust_y_axis(x, pos):
    return x / (len(mydata) * 1.0)

ax.yaxis.set_major_formatter(tick.FuncFormatter(adjust_y_axis))

appelez simplement adjust_y_axis comme ci-dessus avant plt.show().

5
fraxel