2014-05-12 3 views
2

matplotlibbasemap API에서 머리를 감싸려고합니다. 제가 원했던 것은 원통형 투영법상의 매우 작은 영역 (양쪽 방향으로 2km)의 위도와 경도 데이터를 플롯하는 것입니다.matplotlib basemap의 데이터 제한 설정

문제는 이해 할 수없는거야, 얼마나 llcrnrlon, llcrnrlat, urcrnrlonBasemap 생성자 작업에 urcrnrlat 매개 변수를 설정합니다.

는 지금까지 내가 그것을 이해의 llcrnrlon 서쪽 가장 경도이며 llcrnrlat는 남쪽 대부분의 위도와 urcrnrlonurcrnrlat 동쪽 가장 북쪽 가장 경도이며, 각각 위도.

이 모든 경우 좌표가 주어지면 (숫자로) 가장 작은 경도가 가장 서쪽이며 가장 작은 위도가 가장 남쪽이며 그 반대도 마찬가지입니다. 이 이해가 맞습니까?

기본 Axes 개체에서 xlim 및 ylim을 설정하여 플롯 작업을 할 수 있지만 basemap 생성자에서 동일한 값을 사용하면 데이터가 플롯에서 벗어나는 것 같습니다.

EDIT : 문제점의 재생을 위해 다음 코드를 볼 아래 도면에서

from matplotlib import pyplot 
from mpl_toolkits import basemap 
import random 

lat_bounds = 52.063443, 52.072587 
long_bounds = 1.010408, 1.024502 

ax1 = pyplot.subplot(121) 
ax2 = pyplot.subplot(122) 
ax1.set_title('With ll* rr*') 
ax2.set_title('With default values') 

my_map1 = basemap.Basemap(projection='cyl', llcrnrlat=lat_bounds[0], llcrnrlon=long_bounds[0], 
      urcrnrlat=lat_bounds[1], urcrnrlon=long_bounds[1], ax=ax1) 

my_map2 = basemap.Basemap(projection='cyl', ax=ax2) 

data_lats = [random.uniform(*lat_bounds) for i in xrange(50)] 
data_lons = [random.uniform(*long_bounds) for i in xrange(50)] 

my_map1.plot(data_lats, data_lons) 
my_map2.plot(data_lats, data_lons) 

pyplot.show() 

, 오른쪽 화상 Basemap(projection='cyl') 상기 좌측 이미지를 사용하여 이루어진다는 이용된다 Basemap(projection='cyl', llcrnrlat=lat_bounds[0], llcrnrlon=long_bounds[0], urcrnrlat=lat_bounds[1], urcrnrlon=long_bounds[1], ax=ax1)

matplotlib 도구 모음을 사용하여 확대했을 때 두 번째 이미지가되는 오른쪽 이미지의 점에 주목하십시오.

Notice the dot in the right hand side image Right hand side image zoomed

+0

당신은 매개 변수에 관하여 맞습니다. 'llcrnrlon'은 "왼쪽 아래 구석 경도"를 의미합니다. 또한''cyl'' (원통형)는'projection' 키워드의 기본값입니다. 그래서 여러분은 바른 길을 가고 있습니다. 당신은 antimeridian (180 E) 위에 음모를 꾸미는 것과 같은 것을 볼 필요가 있습니다. 플롯하려고하는 값을 게시 할 수 있습니까? –

+0

또한 수동으로'ax1.set_xlim (* lat_bounds)'와'ax1.ylim (* long_bounds) '를 설정하면 트릭을 수행합니다. –

+0

@ThomChubb : 편집 된 게시물을 참조하십시오. –

답변

2

귀하의 예제 코드의 문제는 당신이 주변에 Basemap.plot()에 잘못된 방향으로 인수를 전달하는 것입니다. Basemap.plot의 인수는 원통형 좌표에서

plot(x,y,*args,**kwargs) 

: 정확히 즉를 matplotlib.pyplot.plot하는 것과 동일, 경도는 x 좌표이며 mymap1.plot(data_lons, data_lats)을해야하므로 위도는 Y 좌표입니다. 두 번째 예제에서 작동하는 것처럼 보이는 이유는 ~ 52의 경도와 ~ 1의 위도가 의미가 있습니다. 포인트는 플롯되었지만 도메인과는 멀리 떨어져 있습니다. ax1의 창을 충분히 크게 패닝하면 해당 창을 보았을 것입니다 (ax.set_xlim(lat_bounds)ax.set_ylim(lon_bounds)과 동일 함).

+0

그것은 큰 자리였습니다! 나는 결코 그것을 발견하지 못했을 것이다! –

+0

GIS와지도 제작법에 따르면 대회는 (lat, lon) ... 이것은 전에 두통을 낳았습니다. –