Hi

Thank you very much, it worked perfectly :D

Kind regards

Pål

On 27 January 2012 15:29, Tony Yu <tsyu80@gmail.com> wrote:


On Fri, Jan 27, 2012 at 9:13 AM, Pål Gunnar Ellingsen <paalge@gmail.com> wrote:
Hi

I have a array, M, which is (4Nx4M), and an array (image), im, which is NxM.
I can currently plot the matrix as a 2d image using imshow using:

import matplotlib.pyplot as plt
from matplotlib import cm

# some code for reading in the matrix

cmap = cm.get_cmap('jet', 256)
imM = plt.imshow(M, cmap=cmap, vmin= -1, vmax=1)

But now i would like to plot im on top of M, such that it covers the firs element of M.
If I do

plt.hold()
plt.imshow(im)

I only see im, and not M. I'm used to doing this in Matlab, where this would work.

Can anyone explain me what I'm doing wrong?


Kind Regards

A call to `plt.autoscale` should fix your problem. It looks like `imshow` rescales the axes limits to the current image limits, instead of the limits for all the data in the axes. (Executable example below; note, axes "hold" by default, so it's not necessary to call hold).

-Tony



import numpy as np
import matplotlib.pyplot as plt

background = np.random.uniform(0, 255, size=(20, 20))
overlay = np.arange(25).reshape((5, 5))

plt.imshow(background, interpolation='nearest', cmap=plt.cm.gray)
plt.imshow(overlay, cmap=plt.cm.jet, alpha=0.5)
# You could also replace this with `plt.axis([0, 20, 0, 20])
plt.autoscale()
plt.show()