Setting a relative frequency in a matplotlib histogram Setting a relative frequency in a matplotlib histogram python python

Setting a relative frequency in a matplotlib histogram


Because normed option of hist returns the density of points, e.g dN/dx

What you need is something like that:

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


Or you can use set_major_formatter to adjust the scale of the y-axis, as follows:

from matplotlib import ticker as tickdef adjust_y_axis(x, pos):    return x / (len(mydata) * 1.0)ax.yaxis.set_major_formatter(tick.FuncFormatter(adjust_y_axis))

just call adjust_y_axis as above before plt.show().


For relative frequency format set the option density=True. The figure below shows a histogram for 1000 samples taken from a normal distribution with mean 5 and standard deviation 2.0.

Histogram generated with matplotlib

The code is

import numpy as npimport matplotlib.pyplot as plt# Generate data from normal distibutionmu, sigma = 5, 2.0 # mean and standard deviationmydata = np.random.normal(mu, sigma, 1000)fig = plt.figure()ax = fig.add_subplot(111)ax.hist(mydata,bins=100,density=True);plt.show()

If you want % on the y-axis you can use PercentFormatter as shown below

import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.ticker import PercentFormatter# Generate data from normal distibutionmu, sigma = 5, 2.0 # mean and standard deviationmydata = np.random.normal(mu, sigma, 1000)fig = plt.figure()ax = fig.add_subplot(111)ax.hist(mydata,bins=100,density=False);ax.yaxis.set_major_formatter(PercentFormatter(xmax=100))plt.show()

enter image description here