Change resolution of imshow in ipython
Asked Answered
A

2

27

I am using ipython, with a code that looks like this:

image = zeros(MAX_X, MAX_Y)

# do something complicated to get the pixel values...
# pixel values are now in [0, 1].

imshow(image)

However, the resulting image always has the same resolution, around (250x250). I thought that the image's dimensions would be (MAX_X x MAX_Y), but that is seemingly not the case. How can I make ipython give me an image with a greater resolution?

Ashleeashleigh answered 12/6, 2014 at 13:0 Comment(0)
P
39

The height and width of the displayed image on the screen is controlled by the figure size and the axes size.

figure(figsize = (10,10)) # creates a figure 10 inches by 10 inches

Axes

axes([0,0,0.7,0.6]) # add an axes with the position and size specified by 
                    # [left, bottom, width, height] in normalized units. 

Larger arrays of data will be displayed at the same size as smaller arrays but the number of individual elements will be greater so in that sense they do have higher resolution. The resolution in dots per inch of a saved figure can be be controlled with the the dpi argument to savefig.

Here's an example that might make it clearer:

import matplotlib.pyplot as plt
import numpy as np

fig1 = plt.figure() # create a figure with the default size 

im1 = np.random.rand(5,5)
ax1 = fig1.add_subplot(2,2,1) 
ax1.imshow(im1, interpolation='none')
ax1.set_title('5 X 5')

im2 = np.random.rand(100,100)
ax2 = fig1.add_subplot(2,2,2)
ax2.imshow(im2, interpolation='none')
ax2.set_title('100 X 100')

fig1.savefig('example.png', dpi = 1000) # change the resolution of the saved image

images of different sized arrays

# change the figure size
fig2 = plt.figure(figsize = (5,5)) # create a 5 x 5 figure 
ax3 = fig2.add_subplot(111)
ax3.imshow(im1, interpolation='none')
ax3.set_title('larger figure')

plt.show()

Larger sized figuer

The size of the axes within a figure can be controlled in several ways. I used subplot above. You can also directly add an axes with axes or with gridspec.

Pi answered 12/6, 2014 at 14:10 Comment(2)
In the first example you show 2 images side by side; how do you change the size of the image itself? For example to be closer to the border of the image canvasKinesiology
even simpler, it seems enough to just write plt.figure(figsize = (x_new, y_new)) before calling imgshow() without the subplot() lineArnica
T
4

You're probably looking for pcolormesh rather than imshow. The former has the purpose of plotting data into space, pixel-by-pixel, rather than showing an image.

Ternopol answered 1/11, 2017 at 15:25 Comment(2)
It seems to be what I'm looking for, but you should give an example on how to use it.Pori
Here is the documentation: matplotlib.org/3.3.3/api/_as_gen/… @PoriTernopol

© 2022 - 2024 — McMap. All rights reserved.