Search code examples
pythonpython-imaging-librarycolorbar

Add a color bar in imported figure (Python)


I have a figure in a grayscale. I would like to know how to add a color bar in such imported figure, using Python. I know how to plot a 2D array and add a color bar, but I can not figure out how to do a similar task for an imported figure. I also would like to preserve the size of the original image. I import the figure with

from PIL import Image
im= Image.open("gray.png")

Thanks in advance.

`


Solution

  • from mpl_toolkits.axes_grid1 import make_axes_locatable
    import matplotlib.pyplot as plt
    
    def display_image_in_actual_size(im_path):
    
        dpi = 80
        im_data = plt.imread(im_path)
        height, width, depth = im_data.shape
        # What size does the figure need to be in inches to fit the image?
        figsize = width / float(dpi), height / float(dpi)
    
        # Create a figure of the right size with one axes that takes up the full figure
        fig = plt.figure(figsize=figsize)
        ax = fig.add_axes([0, 0, 1, 1])
    
    
        #ax.axis('off') #  uncommenting this will result  a plot without axis !
        # configures size of colorbar 
        divider = make_axes_locatable(ax)
        im=plt.imshow(im_data)
        cax = divider.append_axes("right", size="5%", pad=0.05)
        plt.colorbar(im, cax=cax)
    
        ax.imshow(im_data, cmap='gray')
        ax.set(xlim=[-10, width - 0.5], ylim=[height - 0.5, -0.5], aspect=1)
    
        plt.savefig('last_image.png')    #saving new image
        plt.show()
    
    display_image_in_actual_size("gray.png")
    

    I have adapted some portions of answer from here