gpt4 book ai didi

python - matplotlib/ basemap 没有河流的世界地图?

转载 作者:IT老高 更新时间:2023-10-28 20:46:54 26 4
gpt4 key购买 nike

有没有办法用 basemap (或不用 basemap ,如果有其他方法)绘制大陆边界,而不会出现那些烦人的河流?尤其是那条金刚河,连大海都没有,令人不安。

编辑:我打算在 map 上进一步绘制数据,例如 Basemap gallery (并且仍然将大陆的边界线绘制为数据上的黑线,以提供世界地图的结构)因此,虽然下面 Hooked 的解决方案很好,甚至是高超的,但它不适用于此目的。

world map

图片制作者:

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

fig = plt.figure(figsize=(8, 4.5))
plt.subplots_adjust(left=0.02, right=0.98, top=0.98, bottom=0.00)
m = Basemap(projection='robin',lon_0=0,resolution='c')
m.fillcontinents(color='gray',lake_color='white')
m.drawcoastlines()
plt.savefig('world.png',dpi=75)

最佳答案

出于这样的原因,我经常一起避免使用 Basemap,并使用 OGR 读取 shapefile 并将它们自己转换为 Matplotlib 艺术家。这需要更多的工作,但也提供了更多的灵 active 。

basemap 有一些非常简洁的功能,例如将输入数据的坐标转换为您的“工作投影”。

如果您想坚持使用 Basemap,请获取一个不包含河流的 shapefile。例如,自然地球在物理部分有一个很好的“土地”形状文件(下载“比例等级”数据并解压缩)。见 http://www.naturalearthdata.com/downloads/10m-physical-vectors/

您可以使用 Basemap 中的 m.readshapefile() 方法读取 shapefile。这允许您在投影坐标中获取 Matplotlib 路径顶点和代码,然后您可以将其转换为新路径。它有点绕道,但它为您提供了来自 Matplotlib 的所有样式选项,其中大部分不能通过 Basemap 直接获得。它有点 hackish,但我现在在坚持 Basemap 时没有另一种方式。

所以:

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.collections import PathCollection
from matplotlib.path import Path

fig = plt.figure(figsize=(8, 4.5))
plt.subplots_adjust(left=0.02, right=0.98, top=0.98, bottom=0.00)

# MPL searches for ne_10m_land.shp in the directory 'D:\\ne_10m_land'
m = Basemap(projection='robin',lon_0=0,resolution='c')
shp_info = m.readshapefile('D:\\ne_10m_land', 'scalerank', drawbounds=True)
ax = plt.gca()
ax.cla()

paths = []
for line in shp_info[4]._paths:
paths.append(Path(line.vertices, codes=line.codes))

coll = PathCollection(paths, linewidths=0, facecolors='grey', zorder=2)

m = Basemap(projection='robin',lon_0=0,resolution='c')
# drawing something seems necessary to 'initiate' the map properly
m.drawcoastlines(color='white', zorder=0)

ax = plt.gca()
ax.add_collection(coll)

plt.savefig('world.png',dpi=75)

给予:

enter image description here

关于python - matplotlib/ basemap 没有河流的世界地图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14280312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com