簡體   English   中英

如何使用python在地理地圖上以3D弧線繪制邊緣?

[英]How to draw edges as 3D arcs on a geographic map using python?

我想創建一個類似於

在此處輸入圖片說明

在python中。 到目前為止,我已經能夠在2D上繪制它。 邊緣的密度使圖形變得不整齊。 在3-D中繪制邊緣會增強美感,並使其更具吸引力。 任何幫助將不勝感激。 提前致謝

原則上,您可以使用Basemap 您可以按照本教程在3D軸上繪制Basemap ,然后在其上繪制圓弧。 但是,如果您想按照示例圖所暗示的方式為不同的國家/地區着色,則必須開始處理shapefiles (例如,請參見此處此處 )。 無論如何,在示例代碼下可以繪制底圖和3D圖中的弧。 在3D軸上繪制底圖的部分直接來自我上面鏈接的教程。

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()

這里是示例代碼的結果:

以上代碼的結果

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM