2017-07-25 11 views
2

私はPythonでmatplotlibのパッケージから「spstere」投影を使用して、南極の特定の領域に私のマップを集中しようとしています。私は南極大陸の全体をプロットすることができましたが、今回は大陸の特定の地域を「ズームイン」して詳細に調べたいと思います。他の突起を使用matplotlibの:spstere投影を使用して緯度/経度の特定に焦点を当てる

同様の例(Pyplot contour plot - clabel spacing; http://matplotlib.org/basemap/api/basemap_api.html; https://matplotlib.org/basemap/users/examples.html)は、オンラインで利用可能であるが、私は南極を超える「spstere」突出部にそれらを適用することができていません。

私は基本的に私は「spstere」でこのコードを使用しようとしました

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

からおよそまたがる南極半島の領域の上に私のマップを集中したい

projのが、Pythonはのみになりますアカウントboundinglatとlon_0。私はboundinglatとlon_0の値を変更しようとしましたが、どちらも機能しません。

どうすればいいのですか?私はまた 'cyl'のような他の投影法を使ってみましたが、 'spstere' projのような素敵な正方形を得る代わりに、横長の四角形を得ました。

m = Basemap(projection='cyl',lon_0=0,lat_0=0,\ 
     llcrnrlon=-180,urcrnrlon=180,llcrnrlat=-90,urcrnrlat=-55.0,resolution='c') 

ご協力いただきまして誠にありがとうございます。

答えて

2

極座標プロジェクション'spstere'を使用すると、南極地域を得ることができます。 boundinglat=-60'spstere'は常に南極を中心としていることを

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

enter image description here

注意。
マップを南極の中心に配置しない場合は、"stere"投影を使用する必要があります。 "stere"投影のコーナーを設定することは、前方に向かっているわけではありません。

一つは、従って'spstere'投影のプロットを使用して、関心領域を囲むことになるいくつかのポイントを見つけることができます。この場合、これらの点、(-150,-70, -30,-55)を使用

enter image description here

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

、マップのコーナーとして、その後 'stere'投影を使用してマップをプロットすることができます。

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) 

enter image description here

このヒューリスティック手法を望んでいたされていない場合、あなたは、'spstere'投影にダミーマップを作成することによって、この手順を自動化することが、質問(llcrnrlon=-100,urcrnrlon=-30,llcrnrlat=-90,urcrnrlat=-55.0)で四角形の座標を計算し、新しいベースマップを作成その中でstere投影。以下の機能は、ActiveState site(著者のPG)から取られています。華麗です

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

enter image description here

+0

。正確に私が必要としたもの。詳細な答えをありがとう! – jb16006

関連する問題