簡體   English   中英

你能描繪羅賓遜預測的流線型嗎?

[英]Can you plot streamlines on Robinson projections?

我試圖用羅賓遜投影在全球地圖上繪制流線圖,但是底圖似乎不喜歡預測的坐標。 當然,它適用於普通的圓柱形投影,它在x方向上是規則的。

這是一個例子:

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np

u = np.ones((21,21)) 
v = np.ones((21,21))
lats = np.arange(-90,91,9)
lons = np.arange(-180,181,18)
x,y = np.meshgrid(lons,lats)

# It works for Cylindrical
mp = Basemap(projection='cyl')
xx,yy = mp(x,y)
mp.streamplot(xx,yy,u,v)
mp.drawcoastlines()
plt.show()

# But not Robinson
mp = Basemap(projection='robin',lon_0=0)
xx, yy = mp(x, y) 
mp.streamplot(xx,yy,u,v)
mp.drawcoastlines()
plt.show()

它抱怨x坐標,提出:

ValueError: The rows of 'x' must be equal

那么有可能在羅賓遜投影上繪制流線型嗎?

使用命令xx,yy = mp(x,y)根據特定投影的坐標變換將應用於您的lon和lats。 對於大多數投影,這將導致網格點的扭曲,使得x行不再相等,因此錯誤: ValueError: The rows of 'x' must be equal 要解決此問題,您需要重新網格化數據,例如:

import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib as plt

u = np.ones((21,21)) 
v = np.ones((21,21))
lats = np.arange(-90,91,9)
lons = np.arange(-180,181,18)
x,y = np.meshgrid(lons,lats)

mp = Basemap(projection='robin',lon_0=0)
xx, yy = mp(x, y) 

# generate a grid that is equally spaced in a plot with the current pojection
lons, lats, xxnew, yynew = mp.makegrid(21,21, returnxy=True)

# project the data onto the new grid
unew = plt.mlab.griddata(xx.flatten(), yy.flatten(),u.flatten(), xxnew, yynew ,interp='linear')
vnew = plt.mlab.griddata(xx.flatten(), yy.flatten(),v.flatten(), xxnew, yynew ,interp='linear')

mp.streamplot(xxnew,yynew,unew,vnew)
mp.drawcoastlines()
plt.show()

暫無
暫無

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

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