pythonmatplotlibdatasethistogramhistogram2d

Get center of bins histograms python


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?


Solution

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

    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])