北极立体投影不起作用

时间:2019-03-04 22:27:46

标签: python-3.x matplotlib-basemap map-projections

我正在尝试使用相对于北极的底图偏移量来创建立体图,但是东西方向显然是相反的。这是我执行中的错误还是错误?

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

m = Basemap(projection='stere',
        lat_0=90, lon_0=270,  lat_ts=(90.+35.)/2.,
        llcrnrlon=150,urcrnrlon=-60,llcrnrlat=50,urcrnrlat=50)

m.drawmeridians(np.arange(0,360,30),labels=[1,1,1,0])
m.drawparallels(np.arange(-90,90,5))
m.drawcoastlines()
m.shadedrelief()
plt.show()

结果如下: result from script

如何复制以下地图(以偏心为中心并旋转?)

Restricted map

1 个答案:

答案 0 :(得分:0)

使用方位角类型的地图投影始终需要一组适当的参数才能获得良好的效果。在这种情况下,“立体投影”以北极为中心,当使用经常使用的PlateCaree投影实现时,通常不使用其适当的参数。这是您可以尝试的工作代码。

# Stereographic projection coverage
#   should be specified less than half of a hemisphere

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

m = Basemap(projection='stere', resolution='c',
        lat_0=90, lon_0=270,  lat_ts=(90.+35.)/2., width=15000000, height=10000000)
# (width, height) is the plot extents in meters

m.drawmeridians(np.arange(0, 360, 30), labels=[1,1,1,0])
m.drawparallels(np.arange(0, 90, 10), labels=[0,0,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()

生成的图(图1):

enter image description here

通过重新放置地图可以使世界的其他地区进入绘图区域。

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

# projection center point
lon0 = 180
lat0 = 60

m = Basemap(projection='stere', resolution='c',
        lat_0=lat0, lon_0=lon0,  lat_ts=lat0, width=15000000, height=10000000)

m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,0,1])  # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,1,0])
m.drawcoastlines()
m.shadedrelief()
plt.show()

输出图(图2):

enter image description here

通过在llcrnrlon中指定urcrnrlonllcrnrlaturcrnrlatBasemap()的适当值,可以根据需要获取地图范围。这是OP要求的另一个情节示例。

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

fig = plt.figure(figsize=(8,8))
m = Basemap(projection='stere', resolution='c',
        lat_0=90, lon_0=-90,  lat_ts=(90.+35.)/2.,
        llcrnrlon=-142, urcrnrlon=78, llcrnrlat=19, urcrnrlat=45)

m.drawmeridians(np.arange(0, 360, 30), labels=[1,0,1,0])  # left, right, top, bottom
m.drawparallels(np.arange(0, 90, 10), labels=[0,1,0,1])
m.drawcoastlines()
m.shadedrelief()
plt.show()

生成的图(图3):

map3