2017-04-05 7 views
2

기본적으로 위도 및 경도 데이터가 채워져있는 CSV는 데이터 프레임의 두 개의 별도 열에 추가됩니다. 그런 다음 그것을 사용하여 모든 데이터가 그려지는 지구본을 만듭니다. 데이터가 올바르게 음모를 꾸미는 것을 제외하고 나는 그 이유를 모른다.Basemap Scatter not plotting 正しく 대답하지 않음

데이터 파일을 읽고 csv에 추가합니다.

data_col = ['IP', 'Reliability', 'Risk', 'Type', 'Country', 'Locale', 'Co-Ords', '?'] 
data = pd.read_csv('reputation.data', sep='#', names=data_col) 

공동 Ords 열을받는 두 개의 다른 열

data['Co-Ords'] = data['Co-Ords'].str.replace('ut: ','') 
data['lat'] = data['Co-Ords'].apply(lambda x: x.split(',')[0]) 
data['lon'] = data['Co-Ords'].apply(lambda x: x.split(',')[1]) 

기본 맵 데이터로 구현으로 분할

;

m1 = Basemap(projection='ortho', lon_0=4,lat_0=46, resolution='l') 

fig=plt.figure(figsize=(12, 6)) 

m1.drawmapboundary(fill_color='black') 
m1.fillcontinents(color='white',lake_color='black') 
m1.drawcoastlines() 
m1.drawcountries() 

x=(data['lat']).as_matrix() 
y=(data['lon']).as_matrix() 

m1.scatter(x,y,cmap=cm.cool,marker="*", color='r', alpha=0.7, 
latlon=True, zorder=10) 
plt.title("IP Addresses on the Globe") 
plt.show() 

는 그리고 그것은 다음과 같습니다 Globe

이 도움을 주셔서 감사합니다.

편집 : 당신은 convert your longitude and latitude to map coordinates-x, y = m1(x, y)를 통해 필요

IP Reliability Risk Type Country Locale Co-Ords ? lat lon 
46.4.123.15 4 2 Malicious DE NaN 51.0,9.0 3 51 9 
116.117.253.243 3 2 Scanning CN Baotou 40.6521987915,109.82219696 11 40.6521987915 109.82219696 
123.59.59.89 4 2 Malicious CN Beijing 39.9289016724,116.388298035 3 39.9289016724 116.388298035 
123.59.71.2 4 2 Malicious CN Beijing 39.9289016724,116.388298035 3 39.9289016724 116.388298035 
123.59.149.74 4 2 Malicious CN Beijing 39.9289016724,116.388298035 3 39.9289016724 116.388298035 
+0

당신이 공유 할 수 위해 노력하고 있습니다

를 아래 코드에서, 나는 명확 생각이 하나 개의 라인과 그 라인과 매트릭스 변환을 교체 스 니펫 (snippet), 5-10 행의 데이터에서 데이터 포인트가 표시 될 것으로 예상되는 국가에 주석을 추가 할 수 있습니까? –

+0

[예, 다음과 같이 보입니다] (http : //i.imgur.com/9Cv0PYE.png) –

+0

감사합니다. 복사하여 쉽게 출력 할 수 있도록 질문에 텍스트를 추가 할 수 있습니까? 당신은'print (data.head())'를 할 수 있고, 그냥 여기에 복사 할 수 있습니다. 또한이 부분 집합을 플롯하여 이러한 점들이지도에 잘못 배치되었는지 확인 했습니까? –

답변

0

에서 읽고 있어요 데이터입니다. 이 코드는 나를

m1 = Basemap(projection='ortho', lon_0=4,lat_0=46, resolution='l') 
fig=plt.figure(figsize=(12, 6)) 

m1.drawmapboundary(fill_color='black') 
m1.fillcontinents(color='white',lake_color='black') 
m1.drawcoastlines() 
m1.drawcountries() 

x,y = m1(data['lon'].values, data['lat'].values) 
m1.scatter(x,y, marker="*", color='r', alpha=0.7, zorder=10) 

plt.title("IP Addresses on the Globe") 
plt.show() 

enter image description here

+0

완벽하고 고정했습니다. 나는 비슷한 것을 시도했지만 .values ​​() 부분은 값을 읽어야하는 방법을 수정했다고 생각합니다. –

+0

@ A.Timmins 그렇습니다. 데이터 프레임의 열을 시리즈로 직접 전달하지 못했고, .values ​​()가 numpy 배열로 변환되었습니다. –