2014-07-06 4 views
0

yaxis와 xaxis를 어떻게 사용하고 싶은데 플롯의 데이터와 상관 관계가 없습니까? 예를 들어, 나는 아래의 코드를 사용하여 이미지로 세계지도를 플롯 할 :하여 rigth 왼쪽과 y 축에서 0 ... image_size_x :파이썬에서 matplotlib를 사용하여 축 범위를 위도와 경도로 변경하십시오.

import matplotlib.pyplot as plt 

fig = plt.figure() 
plt.imshow(world_map) 

결과, 내가 X- 축있어 0. ..image_size_y 위에서 아래로. 축 범위를 위도 및 경도 형식으로 변경하려면 어떻게해야합니까? 따라서 그림 축은 실제 데이터가 그림에 표시된 것과 상관없이 두 필드 (x와 y)에도 (90에서 -90까지)를 포함해야합니다.

pylab.ylim([90,-90]) 

90 개 픽셀만큼 아래로 화상을 이동 및 image_size_y/90의 비율로 이미지의 y 치수를 감소 설정한다. 그래서 xlim/ylim은 그림으로 그려진 데이터로 작동하기 때문에 작동하지 않을 것입니다.

답변

0

가정 (게시물 기준) 이미지가 미세하지만 축 레이블이 꺼져 수동으로 축 레이블 구현되는이 주위에 재생 해보십시오 :

plt.figure(1)  
ax = plt.subplot(111) 
#... do your stuff 
#need to figure out your image size divided by the number of labels you want 
#FOR EXample, if image size was 180, and you wanted every second coordinate labeled: 
ax.set_xticks([i for i in range(0,180,2)]) #python3 code to create 90 tick marks 
ax.set_xticklabels([-i for i in range(-90,90,2)]) #python3 code to create 90 labels 
#DO SAME FOR Y 

사용하는 트릭 메신저 그림을이다 원하는 레이블 수 (여기서는 90 : 180/2)를 범위에서 (0, 이미지 크기) 균등하게 눈금을 추가 한 다음 수동으로 레이블을 지정하십시오. 한마디로

ax.set_xticks([i for i in range(0,IMAGE_SIZE,_EVERY_XTH_COORD_LABELED)]) #python3 code to create 90 tick marks 
ax.set_xticklabels([-i for i in range(-90,90,EVERY_XTH_COORD_LABELED)]) #python3 code to create 90 labels 
+0

'set_xticklabels'는 거의 항상 나쁜 생각입니다. 그것은 귀하의 데이터에서 귀하의 레이블을 분리합니다. 'FuncFormatter'를 사용하는 것이 더 좋습니다. – tacaswell

0

: imshow으로 extent 키워드를 사용하여 여기에 일반 식이다. 코드에서

:지도가 거꾸로 다음의 경우

import matplotlib.pyplot as plt 

fig = plt.figure() 
ax = fig.add_subaxis(111) 
ax.imshow(world_map, extent=[-180,180,-90,90], aspect='auto') 

imshow에 키워드 인수 origin='lower'를 추가합니다. 이 두 가지 차원에서지도를 개별적으로 확장 가능하게 만들려면 aspect='auto'이 필요합니다. (add_subaxis을 가진 추가 행의 나머지 부분은 코드를 객체 지향적으로 만드는 것일뿐입니다.

imshow에 이미지의 범위가 지정되어 있지 않으면 ' 각 픽셀을 위치 (0,0), (0,1), ..., (Nx-1, Ny-1)에 중심에두기를 원한다면 이미지 범위는 (-.5, - 5).

+0

잘 작동합니다. 그러나 나는 위도 (y 차원)의 각 20 도가 픽셀 단위로 다른 [mercator 투영지도] (http://postimg.org/image/hrur2d06j/)를 사용합니다. 그래서 나는 더 나은 방법은 Tommy가 아래에서 말한 것과 같은 것을 사용할 것이라고 생각합니다. – dizcza