Diagtwig de dispersión de Matplotlib – Eliminar el relleno blanco

Estoy trabajando con matplotlib para trazar una variable en las coordenadas de longitud de latitud. El problema es que esta imagen no puede incluir ejes o bordes. He podido eliminar ejes, pero el relleno blanco alrededor de mi imagen debe eliminarse por completo (vea las imágenes de ejemplo en el código a continuación: http://imgur.com/a/W0vy9 ).

He intentado varios métodos de búsquedas en Google, incluidas estas metodologías de StackOverflow:

Eliminar el relleno del trazado de matplotlib

Cómo eliminar el relleno / borde en un subplot de matplotlib (SOLUCIONADO)

Parcelas de matplotlib: eliminación de ejes, leyendas y espacios en blanco.

Pero nada ha funcionado en la eliminación del espacio en blanco. Si tiene algún consejo (incluso si es deshacerse de matplotlib y probar con otra biblioteca de ploteo) ¡se lo agradecería!

Aquí hay una forma básica del código que estoy usando que muestra este comportamiento:

import numpy as np import matplotlib from mpl_toolkits.basemap import Basemap from scipy import stats lat = np.random.randint(-60.5, high=60.5, size=257087) lon = np.random.randint(-179.95, high=180, size=257087) maxnsz = np.random.randint(12, 60, size=257087) percRange = np.arange(100,40,-1) percStr=percRange.astype(str) val_percentile=np.percentile(maxnsz, percRange, interpolation='nearest') #Rank all values all_percentiles=stats.rankdata(maxnsz)/len(maxnsz) #Figure setup fig = matplotlib.pyplot.figure(frameon=False, dpi=600) #Basemap code can go here x=lon y=lat cmap = matplotlib.cm.get_cmap('cool') h=np.where(all_percentiles >= 0.999) hl=np.where((all_percentiles  0.90)) mh=np.where((all_percentiles > 0.75) & (all_percentiles = 0.4) & (all_percentiles < 0.75)) l=np.where(all_percentiles < 0.4) all_percentiles[h]=0 all_percentiles[hl]=0.25 all_percentiles[mh]=0.5 all_percentiles[ml]=0.75 all_percentiles[l]=1 rgba_low=cmap(1) rgba_ml=cmap(0.75) rgba_mh=cmap(0.51) rgba_hl=cmap(0.25) rgba_high=cmap(0) matplotlib.pyplot.axis('off') matplotlib.pyplot.scatter(x[ml],y[ml], c=rgba_ml, s=3, marker=',',edgecolor='none', alpha=0.4) matplotlib.pyplot.scatter(x[mh],y[mh], c=rgba_mh, s=3, marker='o', edgecolor='none', alpha=0.5) matplotlib.pyplot.scatter(x[hl],y[hl], c=rgba_hl, s=4, marker='*',edgecolor='none', alpha=0.6) matplotlib.pyplot.scatter(x[h],y[h], c=rgba_high, s=5, marker='^', edgecolor='none',alpha=0.75) fig.savefig('/home/usr/code/python/testfig.jpg', bbox_inches=0, nbins=0, transparent="True", pad_inches=0.0) fig.canvas.draw() 

El problema es que todas las soluciones dadas en los gráficos de Matplotlib: eliminar ejes, leyendas y espacios en blanco realmente están pensadas para funcionar con imshow .

Entonces, lo siguiente claramente funciona

 import matplotlib.pyplot as plt fig = plt.figure() ax=fig.add_axes([0,0,1,1]) ax.set_axis_off() im = ax.imshow([[2,3,4,1], [2,4,4,2]], origin="lower", extent=[1,4,2,8]) ax.plot([1,2,3,4], [2,3,4,8], lw=5) ax.set_aspect('auto') plt.show() 

y produce

introduzca la descripción de la imagen aquí

Pero aquí, estás usando scatter . Añadiendo un diagtwig de dispersión

 import matplotlib.pyplot as plt fig = plt.figure() ax=fig.add_axes([0,0,1,1]) ax.set_axis_off() im = ax.imshow([[2,3,4,1], [2,4,4,2]], origin="lower", extent=[1,4,2,8]) ax.plot([1,2,3,4], [2,3,4,8], lw=5) ax.scatter([2,3,4,1], [2,3,4,8], c="r", s=2500) ax.set_aspect('auto') plt.show() 

produce

introduzca la descripción de la imagen aquí

Scatter tiene la particularidad de que matplotlib intenta hacer que todos los puntos estén visibles de forma predeterminada, lo que significa que los límites de los ejes se establecen de manera tal que todos los puntos de la dispersión estén visibles como un todo.

Para superar esto, necesitamos establecer específicamente los límites de los ejes:

 import matplotlib.pyplot as plt fig = plt.figure() ax=fig.add_axes([0,0,1,1]) ax.set_axis_off() im = ax.imshow([[2,3,4,1], [2,4,4,2]], origin="lower", extent=[1,4,2,8]) ax.plot([1,2,3,4], [2,3,4,8], lw=5) ax.scatter([2,3,4,1], [2,3,4,8], c="r", s=2500) ax.set_xlim([1,4]) ax.set_ylim([2,8]) ax.set_aspect('auto') plt.show() 

De modo que obtendremos el comportamiento deseado.

introduzca la descripción de la imagen aquí