pythonmatplotlibcolorbarimshow

Positioning the colorbar


I have a matplotlib plot with a colorbar attached. I want to position the colorbar so that it is horizontal, and underneath my plot.

I have almost done this via the following:

plt.colorbar(orientation="horizontal",fraction=0.07,anchor=(1.0,0.0))

But the colorbar is still overlapping with the plot slightly (and the labels of the x axis). I want to move the colorbar further down, but I can't figure out how to do it.


Solution

  • Edit: Updated for matplotlib version >= 3.

    Three great ways to do this have already been shared in this answer.

    The matplotlib documentation advises to use inset_locator. This would work as follows:

    import matplotlib.pyplot as plt
    from mpl_toolkits.axes_grid1.inset_locator import inset_axes
    import numpy as np
    
    rng = np.random.default_rng(1)
    
    fig, ax = plt.subplots(figsize=(4,4))
    im = ax.imshow(rng.random((11, 16)))
    ax.set_xlabel("x label")
    
    axins = inset_axes(ax,
                        width="100%",  
                        height="5%",
                        loc='lower center',
                        borderpad=-5
                       )
    fig.colorbar(im, cax=axins, orientation="horizontal")
    

    code output