2016-06-30 4 views
0

나는 위도와 경도가 길고 궁극적 인 목표는 북미지도에서 각 위도/경도 쌍의 발생 수를 플로팅하는 것입니다. sort_df.values ​​및 pmeshcolor를 사용하여Python - Pcolormesh와베이스 맵이 예상대로 플로팅되지 않았습니다.

longitude -95 -94 -93 -92 
latitude 
43   0 4 8 3 
44   7 3 0 0 

, 나는 데이터를 플롯 할 수 있습니다 : 예를 들어, 내가 좋아 보인다 sort_df라는 DataFrame을 보유하고 있습니다. 다음과 같이 코드는 다음과 같습니다 enter image description here

문제 :

m.Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80) 
m.drawcoastlines() 
m.drawstates() 
ny = sort_df.shape[0] 
nx = sort_df.shape[1] 
lons, lats = m.makegrid(nx,ny) 
x,y = m(lons,lats) 
my_cmap = plt.get_cmap('rainbow') 
my_cmap.set_under('white') 
data = np.array(sort_df.values) 
cs = m.pcolormesh(x,y,data,cmap = my_cmap, vmin = 1) 
m.colorbar(cs,extend = 'min') 
plt.show() 

위의 코드처럼 보이는 플롯을 생산에만 sort_df에 의해 정의 된 위도/경도 그리드 색상이 있어야합니다.

질문 : 그리드를지도의 올바른 지점에 표시하려면 어떻게합니까?

답변

1

위도로 변환하는 동안 누락되었습니다. 배열 latslons이 비어 있습니다.

코드의 또 다른 문제는 data (이것은 지점 사이 그릴) pcolormesh와 음모 [NX-1, NY-1]의 형태를 가져야한다는 것이다 :

import numpy as np 
from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
from pandas import DataFrame 

m = Basemap(llcrnrlon = -170, llcrnrlat = 10, urcrnrlon = -50, urcrnrlat = 80) 
m.drawcoastlines() 
m.drawstates() 

lon = np.array([-95, -94, -93, -92, -91]) 
lat = np.array([43, 42, 41]) 
data = np.array([[0,4,8,3],[7,3,0,0]]) 
# you have to write just like here to convert coordinates 
x,y = m(lon,lat) 

my_cmap = plt.get_cmap('rainbow') 
my_cmap.set_under('white') 
cs = m.pcolormesh(x,y,data,cmap = my_cmap) 
m.colorbar(cs, extend = 'min') 
plt.show() 

enter image description here