【问题标题】:How to use basemap and matplotlib to display only a detailed map of a country?如何使用底图和matplotlib只显示一个国家的详细地图?
【发布时间】:2021-01-09 05:47:33
【问题描述】:

我用这段代码在世界地图上画了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()

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

【问题讨论】:

  • 你可能想用shapefile of china
  • 你能举个例子吗?
  • 看看这个programmersought.com/article/82031042577如果你只想要中国地图,那么你不需要shapefile,但如果你需要州和城市坐标,那么你需要shapefile

标签: python matplotlib matplotlib-basemap


【解决方案1】:

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

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()

你会得到这个情节:

【讨论】:

    【解决方案2】:

    正如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()
    

    【讨论】:

      猜你喜欢
      • 2017-07-23
      • 1970-01-01
      • 2019-12-03
      • 2021-08-05
      • 2013-11-27
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多