首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Matplotlib:专注于使用spstere投影的特定lon/lat

Matplotlib:专注于使用spstere投影的特定lon/lat
EN

Stack Overflow用户
提问于 2017-07-25 11:53:12
回答 1查看 2K关注 0票数 3

我试图使用Python中matplotlib包中的“spstere”投影将我的地图集中在南极洲的一个特定区域。我能够绘制整个南极洲的地图,但这一次我想“放大”,仔细观察这块大陆的一个特定区域。

使用其他投影的类似例子(勾勒等高线图.锁骨间距api.htmlhttps://matplotlib.org/basemap/users/examples.html)可以在网上找到,但我无法将这些应用于南极上空的“spstere”投影。

我基本上想把我的地图集中在南极半岛的区域,该区域大致从

llcrnrlon=-100,urcrnrlon=-30,llcrnrlat=-90,urcrnrlat=-55.0

我尝试过用'spstere‘proj来使用这段代码,但是python只考虑了boundinglat和lon_0。我已经尝试过更改boundinglat和lon_0的值,但是它也不起作用。

知道我该怎么做吗?我也尝试使用其他的投影,如'cyl‘,但我没有得到一个好的广场像'spstere’的proj,我得到一个水平矩形。

代码语言:javascript
运行
复制
m = Basemap(projection='cyl',lon_0=0,lat_0=0,\
      llcrnrlon=-180,urcrnrlon=180,llcrnrlat=-90,urcrnrlat=-55.0,resolution='c')

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-25 15:03:38

使用极地赤平投影'spstere',您可以使用例如boundinglat=-60获得南极区域。

代码语言:javascript
运行
复制
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt

m = Basemap(projection='spstere',boundinglat=-60,lon_0=180,resolution='c')
m.drawcoastlines()

plt.show()

请注意,'spstere'总是以南极为中心。

为了得到一张地图,地图不是以南极为中心,你需要使用"stere"投影。设置"stere"投影的角不是向前倾斜的。

因此,我们可以在'spstere'投影中使用一个图,并找到一些将感兴趣区域包围起来的点。在这种情况下,例如。

代码语言:javascript
运行
复制
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

m = Basemap(projection='spstere',boundinglat=-50,
            lon_0=180+(-100+-30)/2.,resolution='c')

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

xll, yll = m(-150,-70) # <-- find those points by looking at meridians and parallels
xur, yur = m(-30,-55)
m.scatter([xll,xur], [yll, yur], c="crimson")
plt.show()

使用这些点,(-150,-70, -30,-55),作为地图的角点,您可以使用'stere'投影绘制地图。

代码语言:javascript
运行
复制
m = Basemap(projection='stere',resolution='c',
            lat_0=-90, lon_0=(-100+-30)/2.,  lat_ts=(-90.+-55.)/2.,
            llcrnrlon=-150,urcrnrlon=-30,llcrnrlat=-70,urcrnrlat=-55)

如果不需要这种启发式方法,您可以通过在'spstere'投影中创建虚拟映射来自动化此过程,从所讨论的矩形(llcrnrlon=-100,urcrnrlon=-30,llcrnrlat=-90,urcrnrlat=-55.0)中计算坐标,并在stere投影中创建一个新的基地图。下面的函数取自ActiveState站点 (作者PG)。

代码语言:javascript
运行
复制
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np

def polar_stere(lon_w, lon_e, lat_s, lat_n, **kwargs):
    '''Returns a Basemap object (NPS/SPS) focused in a region.
    lon_w, lon_e, lat_s, lat_n -- Graphic limits in geographical coordinates.
                                  W and S directions are negative.
    **kwargs -- Aditional arguments for Basemap object.
    '''
    lon_0 = lon_w + (lon_e - lon_w) / 2.
    ref = lat_s if abs(lat_s) > abs(lat_n) else lat_n
    lat_0 = np.copysign(90., ref)
    proj = 'npstere' if lat_0 > 0 else 'spstere'
    prj = Basemap(projection=proj, lon_0=lon_0, lat_0=lat_0,
                          boundinglat=0, resolution='c')
    lons = [lon_w, lon_e, lon_w, lon_e, lon_0, lon_0]
    lats = [lat_s, lat_s, lat_n, lat_n, lat_s, lat_n]
    x, y = prj(lons, lats)
    ll_lon, ll_lat = prj(min(x), min(y), inverse=True)
    ur_lon, ur_lat = prj(max(x), max(y), inverse=True)
    return Basemap(projection='stere', lat_0=lat_0, lon_0=lon_0,
                           llcrnrlon=ll_lon, llcrnrlat=ll_lat,
                           urcrnrlon=ur_lon, urcrnrlat=ur_lat, **kwargs)

llcrnrlon=-100
urcrnrlon=-30
llcrnrlat=-90
urcrnrlat=-55.0
m = polar_stere(llcrnrlon, urcrnrlon, llcrnrlat, urcrnrlat)

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

plt.show()

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45302485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档