离线数据存储在纸板中的哪个位置?它是存储在site-packages下的数据文件夹中吗?有没有办法触发下载所有可用数据?我想将其复制到未连接到互联网的Linux机器上.我目前正在使用连接到互联网的Windows机器,所以我希望从那里下载数据.谢谢.
Google通过正常的API访问(即使使用API密钥)也不支持直接获取Google磁贴.因此,cartopy.io.img_tiles.GoogleTiles效果不佳,因为它只能在一次或两次试验中获取磁贴,之后Google会拒绝请求.
将Google地图与Cartopy一起使用的推荐方法是什么?
谢谢
代码优先:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
ax = plt.axes(projection=ccrs.Mercator())
ax.set_extent([72, 135, 18, 53])
ax.annotate('hello', xy=(100, 49), xycoords='data',
transform=ccrs.PlateCarree(), zorder=12)
plt.show()
Run Code Online (Sandbox Code Playgroud)
结果不是预期的结果,我对我的方法有其他怀疑.所以我的问题是:
如果我想绘制地图看起来像网络地图(例如谷歌地图).地图区域可能与中国一样大,大部分都不是全球性的.谷歌搜索后,这些网站大多使用"网络墨卡托"投影.所以我想我应该plt.axes(projection=ccrs.Mercator()在这里使用,我是对的吗?或者如果我错了我该怎么用?
我想绘制的坐标数据类似于121°E,49°N(在绘制航线之前将度数转换为十进制),未投影,WGS84坐标系统,可能来自GPS.我有权使用transform=ccrs.PlateCarree()吗?或者如果我错了我该怎么用?
在annotate上述说明不了什么.在对该ax.set_extent行进行注释之后,将"hello"文本绘制在零(0,0)点处.我想要的是在点(100°E,49°N)如何纠正这个?
您如何在 Cartopy 中绘制美国县边界?
绘制州和国家边界非常简单
ax.add_feature(cfeature.BORDERS.with_scale('50m'))
ax.add_feature(cfeature.STATES.with_scale('50m'))
Run Code Online (Sandbox Code Playgroud)
但我似乎找不到类似的方法来添加县界。这是 Basemap 的优点之一。
使用底图我用来添加我的自定义边界shapefile,如下所示:
map = Basemap(..)
map.readshapefile(file.shp, 'attribute', drawbounds=True)
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用cartopy做同样的事情?
我试过这个:
ax.add_feature(cfeature.shapereader.Polygon('file.shp'))
Run Code Online (Sandbox Code Playgroud)
但那不起作用..
我试图使用Cartopy在地图上绘制几个点(散点图)的位置(参见下面的代码).当我尝试渲染绘图时,数据点将在LAND层后面呈现.但我想在LAND-layer上绘制我的分散数据......我做错了什么?
Cartopy:ver.0.12.x,Matplotlib:ver.1.4.2
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as cfeature
ax = plt.axes(projection=ccrs.PlateCarree())
ax.set_extent([125, 150, 35, 63])
ax.stock_img()
ax.add_feature(cfeature.LAND) #If I comment this => all ok, but I need
ax.add_feature(cfeature.LAKES)
ax.add_feature(cfeature.RIVERS)
ax.coastlines()
ax.scatter(yc,xc,transform=ccrs.PlateCarree()) #yc, xc -- lists or numpy arrays
plt.show()
Run Code Online (Sandbox Code Playgroud)

我正在尝试制作北美的基本地图,但我不知道如何使海岸线和行政边界的线宽变小。似乎没有为此提供内置选项。有没有简单的解决方法?以下是我迄今为止的代码。
import matplotlib.pyplot as plt
import cartopy.feature as cfeature
import cartopy.crs as ccrs
east = -63
west = -123
north = 55
south = 20
fig = plt.figure()
ax=fig.add_subplot(1,1,1,projection=ccrs.AlbersEqualArea)
ax.set_extent([west, east, south, north])
ax.add_feature(cfeature.OCEAN)
ax.add_feature(cfeature.LAND,color='grey')
ax.add_feature(cfeature.BORDERS)
ax.add_feature(cfeature.COASTLINE)
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 Cartopy 绘制法国地图,但我对此不太满意。
在网上到处搜索Python代码,我构建了以下程序:
import cartopy
import cartopy.feature as cfeature
import cartopy.crs as ccrs
import numpy as np
extent = [-4.25, 7.5, 42.25, 51]
central_lon = np.mean(extent[:2])
central_lat = np.mean(extent[2:])
plt.figure(figsize=(8, 8))
ax = plt.axes(projection=ccrs.AlbersEqualArea(central_lon, central_lat))
ax.set_extent(extent)
ax.gridlines()
rivers_50m = cfeature.NaturalEarthFeature('physical', 'rivers_lake_centerlines', '50m')
ax.add_feature(cartopy.feature.BORDERS, linestyle='-', alpha=1)
ax.add_feature(cartopy.feature.OCEAN,facecolor=("lightblue"))
ax.add_feature(cartopy.feature.LAND, edgecolor='black')
ax.add_feature(cartopy.feature.LAKES, edgecolor='black')
ax.add_feature(rivers_50m, facecolor='None', edgecolor='blue', linestyle=':')
ax.coastlines(resolution='10m', color='red', linestyle='-', alpha=1)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这几乎是我想要的,但是......我不明白为什么原始边界(黑色虚线)会干扰海滨的海岸线(波浪形红线),这真的很难看。
有什么方法可以解决这个问题?(知道我想保持陆地边界不变)。
以下代码生成美国地图,其中每个州都有等高线。问题是该图像看起来像是使用 20 世纪 90 年代的技术生成的。如何显着提高图形的质量,即提高背景的分辨率?
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['figure.dpi'] = 400
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1], projection=ccrs.LambertConformal())
ax.set_extent([-125, -66.5, 20, 50], ccrs.Geodetic())
ax.stock_img()
shapename = 'admin_1_states_provinces_lakes_shp'
states_shp = shpreader.natural_earth(resolution='110m', category='cultural',
name=shapename)
ax.outline_patch.set_visible(False) # don't draw the map border
ax.set_title('My map of the lower 48')
# example state coloring
colors = {
'Minnesota': [0, 1, 0],
'Texas': "#FF0000",
'Montana': "blue",
}
default_color = [0.9375, …Run Code Online (Sandbox Code Playgroud) 有没有办法改进这个交互式 matplotlib/cartopy 脚本的渲染?
请先安装 ipympl https://github.com/matplotlib/ipympl
我还没有找到如何在不实例化新图形的情况下更改中心经度和纬度。
当单击鼠标左键并选择新的投影中心时,此脚本缺乏流动性。我正在寻找https://twojs.org/examples/misc_controls_trackball中的轨迹球行为。
欢迎任何帮助/建议。
%matplotlib widget
import numpy as np
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs
fig = plt.figure(figsize=(10,6), layout='constrained')
proj0 = ccrs.PlateCarree()
proj1 = ccrs.Orthographic(0, 80)
ax1 = fig.add_subplot(1, 1, 1, projection=proj1)
ax1.coastlines()
ax1.gridlines(xlocs=np.arange(-180,180,10), ylocs=np.arange(-80,90,10))
ax1.set_global()
def onpress(event):
global proj1
if event.button == 1:
lon, lat = proj0.transform_point(event.xdata, event.ydata, src_crs=proj1)
proj1 = ccrs.Orthographic(lon, lat)
ax1 = fig.add_subplot(1, 1, 1, projection=proj1)
ax1.coastlines()
ax1.gridlines(xlocs=np.arange(-180,180,10), ylocs=np.arange(-80,90,10))
ax1.set_global()
plt.draw()
fig.canvas.mpl_connect('button_press_event', onpress)
plt.show()
Run Code Online (Sandbox Code Playgroud)
cartopy ×10
matplotlib ×7
python ×4
python-3.x ×2
gis ×1
interactive ×1
projection ×1
python-2.7 ×1