0

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.

`

Ninpou
  • 33
  • 3

1 Answers1

1
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

snehil
  • 586
  • 6
  • 12
  • Thank you very much. This is exactly what I was looking for. Upvoted and accepted as the right answer. – Ninpou Jun 03 '20 at 02:56