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!
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
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()
.