如何解决非正交投影的Cartopy慢速渲染
我正在使用Cartopy在球形坐标中可视化功能。我目前正在使用Cartopy的开发版本(通过pip git+...
安装),并使用Conda的geos
和proj
。我也在使用Shapely的开发版本(带有pip install --no-binary :all: git+https://github.com/Toblerity/Shapely.git
)
我的问题是,当我使用非正交投影渲染图时,与正交投影相比,该库要花费大量时间来生成图像。这里有一个最小的示例:
import numpy as np
import matplotlib.pyplot as plt
import cartopy
import cartopy.crs as ccrs
import time
# Data
# Notice: we can use either phi ∈ [-180,180] OR phi ∈ [0,360]
phi = np.linspace(0,2 * np.pi,100)
lat = np.linspace(-np.pi / 2,np.pi / 2,200)
# NOTICE: that PI is defined in the -z direction
theta = (lat + np.pi / 2)[::-1]
data = np.zeros((len(theta),len(phi)),dtype=np.float64)
for j,Th in enumerate(theta):
for i,Ph in enumerate(phi):
data[j,i] = Ph # plot by longitude
正交(非常快):
t = time.time()
# Set up figure
fig = plt.figure(figsize=(4,4))
inclination = 50 # degrees from pole
ax = plt.axes(projection=ccrs.Orthographic(0,90 - inclination))
vlim = np.max(np.abs(data))
p = ax.pcolormesh(phi * 180 / np.pi,lat * 180 / np.pi,data,transform=ccrs.PlateCarree(),cmap='RdBu',vmin=0,vmax=vlim)
ax.autoscale_view()
gl = ax.gridlines(draw_labels=False)
plt.colorbar(p)
plt.show()
print(time.time() - t)
# 0.1487586498260498
非正交(超慢):
t = time.time()
# Set up figure
fig = plt.figure(figsize=(8,4))
ax = plt.axes(projection=ccrs.InterruptedGoodeHomolosine())
vlim = np.max(np.abs(data))
p = ax.pcolormesh(phi * 180 / np.pi,vmax=vlim)
ax.autoscale_view()
gl = ax.gridlines(draw_labels=False)
plt.colorbar(p)
plt.show()
print(time.time() - t)
# 100.34914875030518
我不确定这是否归因于Cartopy的版本,或者归因于Cartopy依赖的geos
,proj
或shapely
。我记得使用较旧版本的Cartopy时渲染速度并不慢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。