Home > OS >  Get center of bins histograms python
Get center of bins histograms python

Time:06-21

I'm using the hist2d function of matplotlib.pyplot, giving it input some coordinates (x,y).

I would like, after having defined the histogram, to get the center of each bin, i.e., the coordinates of the center of each bin.

Is there an easy way to get them?

CodePudding user response:

The return values of plt.hist and plt.hist2d include bin edges, so take the mean of the left edges and right edges:

  • plt.hist

    h, xedges, patches = plt.hist(x)
    xcenters = (xedges[:-1]   xedges[1:]) / 2
    
  • plt.hist2d

    h, xedges, yedges, image = plt.hist2d(x, y)
    xcenters = (xedges[:-1]   xedges[1:]) / 2
    ycenters = (yedges[:-1]   yedges[1:]) / 2
    

Note that you can use numpy functions if preferred, though I find it less readable in this case:

xcenters = np.mean(np.vstack([xedges[:-1], xedges[1:]]), axis=0)

Full example with plt.hist2d:

import matplotlib.pyplot as plt
import numpy as np

x = np.random.random(50)
y = np.random.random(50)

h, xedges, yedges, image = plt.hist2d(x, y, bins=5)

xcenters = (xedges[:-1]   xedges[1:]) / 2
ycenters = (yedges[:-1]   yedges[1:]) / 2

Output:

>>> xedges
# array([0.01568168, 0.21003078, 0.40437988, 0.59872898, 0.79307808, 0.98742718])

>>> xcenters
# array([0.11285623, 0.30720533, 0.50155443, 0.69590353, 0.89025263])

>>> yedges
# array([0.00800735, 0.20230702, 0.39660669, 0.59090636, 0.78520603, 0.97950570])

>>> ycenters
# array([0.10515718, 0.29945685, 0.49375652, 0.68805619, 0.88235586])
  • Related