matplotlib.pyplot.imshow: eliminar el espacio en blanco dentro de las plots cuando se usan los atributos “sharex” y “sharey”

Tengo un problema que es similar al publicado aquí . La diferencia es que obtengo espacios en blanco no deseados dentro del área de trazado cuando trazo dos subplots que comparten ejes a través de los atributos sharex y sharey . Los espacios en blanco persisten incluso después de establecer la autoscale(False) . Por ejemplo, usando un código similar como en la respuesta a la publicación mencionada anteriormente:

 import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot(2, 1, 1) ax.imshow(np.random.random((10,10))) ax.autoscale(False) ax2 = fig.add_subplot(2, 1, 2, sharex=ax, sharey=ax) # adding sharex and sharey ax2.imshow(np.random.random((10,10))) ax2.autoscale(False) plt.show() 

resultados en esta imagen.

También he probado ax.set_xlim(0, 10) y ax.set_xbound(0, 10) según las sugerencias aquí , pero en vano. ¿Cómo puedo deshacerme de los espacios en blanco adicionales? Cualquier idea sería apreciada.

Como se sugiere aquí , agregando:

 ax.set_adjustable('box-forced') ax2.set_adjustable('box-forced') 

resuelve el problema

( documentacion )

Usando plt.subplots como:

 fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=False) ax[0].imshow(np.random.random((10,10))) ax[0].autoscale(False) ax[1].imshow(np.random.random((10,10))) ax[1].autoscale(False) 

yo obtengo esta figura Sin espacios en blanco dentro de los ejes. Usando figsize dentro de plt.subplots o fig.subplots_adjust puede obtener mejores relaciones de eje.

El problema es la maquinaria útil de usar add_subplot . Observe que la cantidad de espacio en blanco cambia si cambia el tamaño de la figura.

Lo siguiente parece funcionar (hasta que redimensionas la figura)

 import matplotlib.pyplot as plt import numpy as np fig = plt.figure(figsize=(5, 5)) ax = fig.add_axes([.3, .55, .35, .35]) ax.imshow(np.random.random((10,10))) ax.autoscale(False) ax2 = fig.add_axes([.3, .05, .35, .35], sharex=ax, sharey=ax ) ax2.imshow(np.random.random((10,10))) ax2.autoscale(False) plt.show() 

Esto parece una mala interacción entre el tamaño / ubicación del objeto de los axes , los ejes compartidos y la relación de aspecto igual de imshow .

Si puedes vivir sin las garrapatas, puedes hacer

 ax.set_axis_off() ax2.set_axis_off() 

Creo que vale la pena abrir un problema en el github matplotlib para esto.