This article will show you how to create an image using matplotlib without any outlines or labels.
Removing frame and labels of a matplotlib figure
Let's look at this example of using matplotlib
import numpy as npimport matplotlib.cm as cmimport matplotlib.pyplot as pltdef bivariate_normal(X, Y, sigmax=1.0, sigmay=1.0, mux=0.0, muy=0.0, sigmaxy=0.0):Xmu = X-muxYmu = Y-muyrho = sigmaxy/(sigmax*sigmay)z = Xmu**2/sigmax**2 + Ymu**2/sigmay**2 - 2*rho*Xmu*Ymu/(sigmax*sigmay)denom = 2*np.pi*sigmax*sigmay*np.sqrt(1-rho**2)return np.exp(-z/(2*(1-rho**2))) / denomdelta = 0.025x = y = np.arange(-3.0, 3.0, delta)X, Y = np.meshgrid(x, y)Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)Z = Z2-Z1 # difference of Gaussiansmy_dpi=100Shape = Z.shapefig = plt.figure(figsize=(Shape[1]/my_dpi, Shape[0]/my_dpi), dpi=my_dpi)im = plt.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,origin='lower', extent=[-3,3,-3,3],vmax=abs(Z).max(), vmin=-abs(Z).max())fig.savefig('MatplotlibImageNoFrame01.png', dpi=my_dpi)plt.show()

You can then remove the frame or outline of an image by adding the set_axis_off() command:
ax = plt.Axes(fig, [0., 0., 1., 1.])ax.set_axis_off()fig.add_axes(ax)
Example
import numpy as npimport matplotlib.cm as cmimport matplotlib.pyplot as pltdef bivariate_normal(X, Y, sigmax=1.0, sigmay=1.0, mux=0.0, muy=0.0, sigmaxy=0.0):Xmu = X-muxYmu = Y-muyrho = sigmaxy/(sigmax*sigmay)z = Xmu**2/sigmax**2 + Ymu**2/sigmay**2 - 2*rho*Xmu*Ymu/(sigmax*sigmay)denom = 2*np.pi*sigmax*sigmay*np.sqrt(1-rho**2)return np.exp(-z/(2*(1-rho**2))) / denomdelta = 0.025x = y = np.arange(-3.0, 3.0, delta)X, Y = np.meshgrid(x, y)Z1 = bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)Z2 = bivariate_normal(X, Y, 1.5, 0.5, 1, 1)Z = Z2-Z1 # difference of Gaussiansmy_dpi=100Shape = Z.shapefig = plt.figure(figsize=(Shape[1]/my_dpi, Shape[0]/my_dpi), dpi=my_dpi)ax = plt.Axes(fig, [0., 0., 1., 1.])ax.set_axis_off()fig.add_axes(ax)im = plt.imshow(Z, interpolation='bilinear', cmap=cm.RdYlGn,origin='lower', extent=[-3,3,-3,3],vmax=abs(Z).max(), vmin=-abs(Z).max())fig.savefig('MatplotlibImageNoFrame02.png', dpi=my_dpi)plt.savefig("test.png", bbox_inches='tight', dpi=200, facecolor='red', pad_inches = 0)plt.show()

Saving matplotlib figure
Once you have created your matplotlib figure, you can save it as an image file for use in other applications. To have the figure fit perfectly, include the parameters "bbox_inches='tight'" and "pad_inches=0" in save():
plt.savefig("MatplotlibImageNoFrame02.png", bbox_inches='tight', dpi=200, facecolor='red', pad_inches = 0)
Example of use
Create an interactive map using Folium and add a Cartopy-created image as an overlay to the map. Step1: create a mercator map with cartopy:
import cartopy.crs as ccrsimport matplotlib.cm as cmimport matplotlib.pyplot as pltimport matplotlib as mplplt.figure(figsize=(16,9))ax = plt.axes(projection=ccrs.Mercator(min_latitude=-85.0, max_latitude=85.0, globe=None, latitude_true_scale=1))ax.set_axis_off()ax.coastlines(resolution='110m')plt.savefig("cartopy_mercator.png", bbox_inches='tight', dpi=200, pad_inches = 0)plt.show()

Step2: overlay image
import osimport foliumfrom folium.raster_layers import ImageOverlaym = folium.Map([0,0], zoom_start=1, crs='EPSG3857')merc = "cartopy_mercator.png"folium.TileLayer(tiles = 'https://server.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/{z}/{y}/{x}',attr = 'Esri',name = 'Esri Satellite',overlay = False,control = True).add_to(m)if not os.path.isfile(merc):print(f"Could not find {merc}")else:img = folium.raster_layers.ImageOverlay(name="Mercator projection SW",image=merc,bounds=[[[-85,-180]],[85,180]],opacity=0.5,interactive=True,cross_origin=False,zindex=1,)folium.Popup("I am an image").add_to(img)img.add_to(m)folium.LayerControl().add_to(m)m

References
| Links | Site |
|---|---|
| set_axis_off | matplotlib.org |
| add_axes() | matplotlib.org |
