matplotlib 底图正射投影保存的文件覆盖与显示区域不同的区域

matplotlib basemap othographic projection saved file covers different area from displayed one

我正在尝试将一小块正交投影保存到文件中(使用 savefig())。使用 plt.show() 的图显示了正确的区域,但保存的图(使用 plt.savefig())显示了整个磁盘的区域,所需地图在中心以小比例显示。

下面左图显示了正确的显示区域。右图显示了整个地球的圆盘,所选区域在中心缩小。

如果有人能指出如何将所选区域保存到图像文件中,我将不胜感激。

from mpl_toolkits.basemap import Basemap
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.lines as lines 
import numpy as np


lon_0 = 5.0
lat_0 = 45.0

max_lat = lat_0 + 10.0
min_lat = lat_0 - 10.0
max_lon = lon_0 + 15.0
min_lon = lon_0 - 15.0

plt.figure(figsize=(6,6))   
my_map = Basemap(projection='ortho', lon_0=lon_0, lat_0=lat_0, resolution='l')

my_map.drawcoastlines()
my_map.drawcountries()
my_map.drawparallels(np.arange(-90.,95.,5.))
my_map.drawmeridians(np.arange(0.,365.,5.))

xmin, ymin = my_map(min_lon, min_lat)
xmax, ymax = my_map(max_lon, max_lat)

my_map.plot( [xmin, xmax], [ymin, ymax], marker=None,color='m')  # plot a cross
my_map.plot( [xmin, xmax], [ymax, ymin], marker=None,color='m')

ax = plt.gca()          # set the axes limits
ax.set_xlim(xmin, xmax)
ax.set_ylim(ymin, ymax)


output_file = 'example_a.png'
plt.savefig( output_file, bbox_inches='tight', dpi=20)        # save image

plt.show()

plt.close('all')

您可以通过删除 bbox_inches='tight' 来解决此问题。此设置将覆盖 xlimylim 设置,而是尝试包括图中的所有线(包括地球圆)。查看 pyplot.savefig docs