如何使用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()
我用这段代码在世界地图上绘制了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()