如何使用basemap和matplotlib只显示一个国家的详细地图?

How to use basemap and matplotlib to display only a detailed map of a country?

我用这段代码在世界地图上绘制了2个经纬度坐标:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m = Basemap(projection='robin', lon_0=0, resolution='l')
lats = [24.48237852, 26.89169118]
lons = [118.1558955, 117.1760012]
m.drawcountries(color='#ffffff', linewidth=0.5)
m.fillcontinents(color='#c0c0c0', lake_color='#ffffff')
x, y = m(lons, lats)
plt.plot(x, y, 'bo', color='r', markersize=5)
plt.show()

这两点都在中国。我只想显示中国地图,让中国地图看起来更大更详细。这两点可以看得更清楚。怎么做?

如果您只想绘制 1 个国家/地区,robin 投影与其他投影相比没有优势。而且 Basemap 无论如何也不允许您这样做。我推荐 merc (Mercator) 投影作为初学者。如果您对要使用的地图投影有任何具体要求,那将是另一个话题。假设使用墨卡托投影,你的代码经过我的一些修改如下。

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

ll_lon, ur_lon, ll_lat, ur_lat = 72, 136, 16, 54
m = Basemap(projection='merc', lon_0=0, resolution='l',
            llcrnrlon = ll_lon, urcrnrlon = ur_lon,
            llcrnrlat = ll_lat, urcrnrlat = ur_lat,
           )
lats = [24.48237852, 26.89169118]
lons = [118.1558955, 117.1760012]
m.drawcountries(color='#ffffff', linewidth=0.5)
m.fillcontinents(color='#c0c0c0', lake_color='#ffffff')
x, y = m(lons, lats)
plt.plot(x, y, 'bo', color='r', markersize=5)

plt.show()

你会得到这个情节:

正如Karthik所说,现在我可以在中国地图上画画了:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
m= Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45, lon_0=100) 
m.readshapefile(r'gadm36_CHN_shp/gadm36_CHN_1', 'states', drawbounds = True)
lats = [24.48237852, 26.89169118]
lons = [118.1558955, 117.1760012]
m.drawcountries(color='#ffffff', linewidth=0.5)
m.fillcontinents(color='#c0c0c0', lake_color='#ffffff')
x, y = m(lons, lats)
plt.plot(x, y, 'bo', color='r', markersize=5)
plt.show()