【问题标题】:North polar stereographic projection is not working北极立体投影不工作
【发布时间】:2019-07-26 07:33:58
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    使用方位角类型的地图投影始终需要一组适当的参数才能获得良好的结果。在这种情况下,以北极为中心的立体投影,它的正确参数不是您在使用经常使用的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):

    要使世界的其他部分进入绘图区域,可以通过重新定位地图来实现。

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

    通过在Basemap()中指定llcrnrlonurcrnrlonllcrnrlaturcrnrlat的适当值,可以根据需要获取地图范围。这是 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):

    【讨论】:

    • 谢谢 - 这真的很有帮助。如果我只想要这张地图的左侧,我将如何绘制它?在这种情况下,参数 urcrnrlon 等似乎不起作用。
    • 谢谢@swatchai - 但是我如何重现地图(不仅有不同的中心点,而且还旋转了?)地图附在我原始帖子的末尾。
    • @Phil:表示感谢的最佳方式是单击我的答案上的accept 按钮。 :)
    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2020-11-02
    • 2023-02-20
    相关资源
    最近更新 更多