python - 如何使用 python 在地理地图上将边缘绘制为 3D 弧?
解决方案
原则上,你想做的事情是可能的Basemap
。您可以按照本教程Basemap
在 3D 轴上绘制 a ,然后在其上绘制弧线。但是,如果您想按照示例图所暗示的方式为不同的国家着色,则必须开始处理(例如,参见此处或此处)。无论如何,下面是一个在 3D 图中绘制底图和弧线的示例代码。在 3D 轴上绘制底图的部分直接取自我上面链接的教程。shapefiles
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from mpl_toolkits.basemap import Basemap
from matplotlib.collections import PolyCollection
import numpy as np
m = Basemap()
fig = plt.figure()
ax = Axes3D(fig)
ax.azim = 270
ax.elev = 50
ax.dist = 8
ax.add_collection3d(m.drawcoastlines(linewidth=0.25))
ax.add_collection3d(m.drawcountries(linewidth=0.35))
polys = []
for polygon in m.landpolygons:
polys.append(polygon.get_coords())
lc = PolyCollection(polys, edgecolor='black',facecolor='#DDDDDD', closed=False)
ax.add_collection3d(lc)
def plot_arc(ax,p1,p2,height,N=100):
x = np.linspace(p1[0],p2[0],N)
y = np.linspace(p1[1],p2[1],N)
z = (1-np.linspace(-1,1,N)**2)*height
ax.plot(x,y,z)
plot_arc(ax,(-70,0),(80,50),1)
plot_arc(ax,(80,50),(125,-25),1)
plot_arc(ax,(125,-25),(-70,0),1)
plt.show()
这里是示例代码的结果:
希望这可以帮助。
推荐阅读
- javascript - 在我们等待响应时如何显示加载器,如果没有数据来显示消息“没有可用数据”?
- azure-web-app-service - 为什么 Azure AppService 实例在即用即付 -S3 计划中显示不同的 CPU 和内存利用率百分比?
- apache-spark - 在带有 pyspark 的 spark.sql 中使用 CTE - 性能
- python - 附加到列表时无法将 /n 转换为实际的换行符()
- postgresql - 在postgres中将全名拆分为名字和姓氏
- google-chrome-extension - 哪些 Chrome 快捷方式不能被覆盖?
- position - 是否可以将 Cytoscape.js 布局数据直接存储为应用程序/Web 服务器中的文件格式并重新启动相同的布局以最大限度地减少重新计算?
- java - 执行时间长的线程是否需要使用线程池
- c# - 如何避免使用 TaskContinuationOptions 继续任务
- javascript - 如何实现构造函数中保存在`this`中的值的隐私?