matplotlib: límites cuando se usa plot e imshow en los mismos ejes

He estado tratando de trazar una elipse en una ttwig del show. Funciona, pero trazar la elipse después de trazar la imagen parece boost xlim y ylim, dando como resultado un borde, del cual me gustaría deshacerme de:

Tenga en cuenta que NO hay un borde blanco directamente después de llamar solo a imshow.

Mi código se ve como sigue:

self.dpi = 100 self.fig = Figure((6.0, 6.0), dpi=self.dpi) self.canvas = FigureCanvas(self.fig) self.canvas.setMinimumSize(800, 400) self.cax = None self.axes = self.fig.add_subplot(111) self.axes.imshow(channel1, interpolation="nearest") self.canvas.draw() self.axes.plot(dat[0], dat[1], "b-") 

He intentado establecer los límites antes y después de llamar a “plot”, sin efecto

 # get limits after calling imshow xlim, ylim = pylab.xlim(), pylab.ylim() ... # set limits before/after calling plot self.axes.set_xlim(xlim) self.axes.set_ylim(ylim) 

¿Cómo puedo forzar la ttwig para no boost los límites de figuras existentes?

Solución (gracias a Joe):

 #for newer matplotlib versions self.axes.imshow(channel1, interpolation="nearest") self.axes.autoscale(False) self.axes.plot(dat[0], dat[1], "b-") #for older matplotlib versions (worked for me using 0.99.1.1) self.axes.imshow(channel1, interpolation="nearest") self.axes.plot(dat[0], dat[1], "b-", scalex=False, scaley=False) 

Lo que está sucediendo es que el eje se ajusta automáticamente a las extensiones de cada elemento que traza. Las imágenes se escalan automáticamente mucho más que las líneas, etc. ( imshow básicamente se llama ax.axis('image') ).

Obtener los límites del eje antes y establecerlos después debería haber funcionado. (Es más limpio hacer solo limits = axes.axis() antes y axes.axis(limits) después, sin embargo).

Sin embargo, si no quieres que las cosas se ajusten automáticamente, lo mejor es desactivar el ajuste automático después de la ttwig inicial. Intente axes.autoscale(False) después de trazar la imagen.

Como ejemplo, compara esto:

 import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() ax.imshow(np.random.random((10,10))) ax.plot(range(11)) plt.show() 

introduzca la descripción de la imagen aquí


Con este:

 import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() ax.imshow(np.random.random((10,10))) ax.autoscale(False) ax.plot(range(11)) plt.show() 

introduzca la descripción de la imagen aquí