matplotlib colorbar in each subplot

后端 未结 5 1022
一生所求
一生所求 2020-11-30 05:33

I would like to add a separate colorbar to each subplot in a 2x2 plot.

fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
z1_plot          


        
相关标签:
5条回答
  • 2020-11-30 06:02

    This can be easily solved with the the utility make_axes_locatable. I provide a minimal example that shows how this works and should be readily adaptable:

    import matplotlib.pyplot as plt
    from mpl_toolkits.axes_grid1 import make_axes_locatable
    
    import numpy as np
    
    m1 = np.random.rand(3, 3)
    m2 = np.arange(0, 3*3, 1).reshape((3, 3))
    
    fig = plt.figure(figsize=(16, 12))
    ax1 = fig.add_subplot(121)
    im1 = ax1.imshow(m1, interpolation='None')
    
    divider = make_axes_locatable(ax1)
    cax = divider.append_axes('right', size='5%', pad=0.05)
    fig.colorbar(im1, cax=cax, orientation='vertical')
    
    ax2 = fig.add_subplot(122)
    im2 = ax2.imshow(m2, interpolation='None')
    
    divider = make_axes_locatable(ax2)
    cax = divider.append_axes('right', size='5%', pad=0.05)
    fig.colorbar(im2, cax=cax, orientation='vertical');
    
    0 讨论(0)
  • 2020-11-30 06:03

    Specify the ax argument to matplotlib.pyplot.colorbar(), e.g.

    import numpy as np
    import matplotlib.pyplot as plt
    
    fig, ax = plt.subplots(2, 2)
    for i in range(2):
        for j in range(2):
             data = np.array([[i, j], [i+0.5, j+0.5]])
             im = ax[i, j].imshow(data)
             plt.colorbar(im, ax=ax[i, j])
    
    plt.show()
    

    0 讨论(0)
  • 2020-11-30 06:09

    Please have a look at this matplotlib example page. There it is shown how to get the following plot with four individual colorbars for each subplot: enter image description here

    I hope this helps.
    You can further have a look here, where you can find a lot of what you can do with matplotlib.

    0 讨论(0)
  • 2020-11-30 06:14

    Try to use the func below to add colorbar:

    def add_colorbar(mappable):
        from mpl_toolkits.axes_grid1 import make_axes_locatable
        import matplotlib.pyplot as plt
        last_axes = plt.gca()
        ax = mappable.axes
        fig = ax.figure
        divider = make_axes_locatable(ax)
        cax = divider.append_axes("right", size="5%", pad=0.05)
        cbar = fig.colorbar(mappable, cax=cax)
        plt.sca(last_axes)
        return cbar
    

    Then you codes need to be modified as:

    fig , ( (ax1,ax2) , (ax3,ax4)) = plt.subplots(2, 2,sharex = True,sharey=True)
    z1_plot = ax1.scatter(x,y,c = z1,vmin=0.0,vmax=0.4)
    add_colorbar(z1_plot)
    
    0 讨论(0)
  • 2020-11-30 06:18

    In plt.colorbar(z1_plot,cax=ax1), use ax= instead of cax=, i.e. plt.colorbar(z1_plot,ax=ax1)

    0 讨论(0)
提交回复
热议问题