python - Cartopy 轮廓缺乏投影
问题描述
我正在尝试通过 cartopy 将一些数据放到等高线图上。但是,在绘制数据之后,投影似乎仍然关闭。surface_temp.X 和 surface_temp.Y 是纬度/经度,而 masked_fill 是实际数据值。这似乎在底图中有效,但我不确定为什么它不在 cartopy 中。
卡托普:
fig = plt.figure(figsize=(12,4.76), dpi=100)
fig.clf()
ax = plt.axes(projection=ccrs.Mercator())
ax.coastlines()
ax.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true', transform = ccrs.Mercator())
plt.show()
底图:
fig = plt.figure(figsize=(15,4.76), dpi=100)
fig.clf()
plt.axes([0,0,1,1], frameon=False)
plt.title(title)
m = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80, llcrnrlon=0,urcrnrlon=360,lat_ts=20,resolution='c')
m.contourf(surface_temp.X, surface_temp.Y, surface_temp.masked_fill[:], latlon = 'true')
底图结果:
Cartopy 结果(轮廓注释掉):
Cartopoy 结果(轮廓)
解决方案
cartopy 的范例似乎总是在纬度/经度坐标上工作。这意味着,您不应根据投影转换数据,而应保持纬度/经度。
因此,而不是
ax.contourf(..., transform = ccrs.Mercator())
你需要
ax.contourf(..., transform = ccrs.PlateCarree())
一个完整的例子:
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
from cartopy.examples.waves import sample_data
ax = plt.axes(projection=ccrs.Mercator())
lons, lats, data = sample_data(shape=(20, 40))
ax.contourf(lons, lats, data, transform=ccrs.PlateCarree())
ax.coastlines()
ax.gridlines()
plt.show()
推荐阅读
- linux - NGINX docker 容器无法在 Web 浏览器中访问
- mysql - 想将mysql查询转换为Sequelize查询:添加行的两个属性并与另一个比较
- firebase - Firebase 手动 UTM 归因
- python - 无法理解该算法的空间复杂度?
- database - 在 SQLDeveloper 中作为批处理执行多个插入语句
- c# - System.Xml.XmlException:不能对具有子元素的元素调用 ReadElementContentAs() 方法
- python - 如何将焦点更改为pygame窗口?
- makefile - Gnu make:运行shell命令并使用退出代码设置全局变量
- javascript - RxJS / Angular:在订阅之前捕获 FormControl 的 valueChanges
- flutter - 当 showBottomSheet 包含可滚动小部件时,如何使 showBottomSheet 继续滑动?