2014-09-23 1 views
1

나는플로팅 범주 데이터는

____USA.csv____ 
    lats, long, users 
    37.3264, -117.1416, 5334, 
    37.3264, -117.1416, 435, 

가 지금은 세계지도에서 미국에이 데이터를 표시하려면이 형식으로 5 개국에 대한 데이터를 가지고있다. 나는 이것을 시도했다.

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

# read input csv file 
filename = 'D:/22_sept_14/USA.csv' 
lats=[] 
lons=[] 
population=[] 
with open(filename) as f: 
    reader = csv.reader(f) 
    for row in reader: 
     lats.append(float(row[0])) 
     lons.append(float(row[1])) 
     population.append(float(row[2])) 



map = Basemap(projection='robin', resolution = 'l', area_thresh = 1000.0, 
       lat_0=0, lon_0=-130) 
map.drawcoastlines() 
map.drawcountries() 
map.fillcontinents(color = 'gray') 
map.drawmapboundary() 
map.drawmeridians(np.arange(0, 360, 30)) 
map.drawparallels(np.arange(-90, 90, 30)) 

min_marker_size = 2.5 
for lon, lat,pop in zip(lons, lats, population): 
    x,y = map(lon, lat) 
    if pop>1000: 
     color='ro' 
    elif pop<1000: 
     color='yo' 
    msize = pop * .01* min_marker_size 
    map.plot(x, y, color, markersize=msize,alpha=.3) 

plt.show() 

그러나이 방법은 데이터를 "원"으로 표시하는 것이 문제입니다. 내가 원했던 것은 정량적 인 정보/"숫자"(데이터에 비례 한 글자 크기)로이 서클을 채우는 것입니다. 어떻게해야합니까? 테스트 목적으로

나는 (위의 코드에서 두 번째 마지막 줄)을 map.plot 전에이 라인

plt.text(lon,lat,'59%',fontsize=34,fontweight='bold',ha='center',va='center',color='b') 

그러나 심지어이 나던 도움말 등 시도 나는 코드에서 위의 줄을 포함 마자 때문에 이 줄 map.plot(x, y, color, markersize=msize,alpha=.3)은 출력을 제공하지 않습니다. 대신 내가 볼 수있는 것은 "59 %"라는 텍스트뿐입니다. 나는 그려진 원이나 그 텍스트 (59 %)를 가질 수 있습니다. 그러나 둘 다 함께는 아닙니다. 왜 이런 일이 일어나는 걸까요?

답변

2

이것은 나를 위해 일한 것입니다. 음, 그런데 지금은 괜찮아.

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

mark_font=3 
lats=lons=population=[] 
filename = 'D:/22_sept_14/mvsf.csv' 
with open(filename) as f: 
    reader = csv.reader(f) 
    for row in reader: 
     lats.append(float(row[0])) 
     lons.append(float(row[1])) 
     population.append(float(row[2])) 

m = Basemap(projection='robin', resolution = 'l', area_thresh = 10000.0, 
       lat_0=0, lon_0=0) 
m.drawcoastlines() 
m.drawcountries() 
m.fillcontinents(color = 'gray') 
m.drawmapboundary(fill_color='aqua') 
m.drawmeridians(np.arange(0, 360, 30)) 
m.drawparallels(np.arange(-90, 90, 30)) 
# fill continents, set lake color same as ocean color. 
# draw parallels and meridians. 
# label parallels on right and top 
# meridians on bottom and left 
parallels = np.arange(0.,81,10.) 
# labels = [left,right,top,bottom] 
m.drawparallels(parallels,labels=[False,True,True,False]) 
meridians = np.arange(10.,351.,20.) 
m.drawmeridians(meridians,labels=[True,False,False,True]) 
# plot blue dot on Boulder, colorado and label it as such. 
lon, lat = -100.237, 49.125 # Location of Boulder 
# convert to map projection coords. 
# Note that lon,lat can be scalars, lists or numpy arrays. 
xpt,ypt = m(lon,lat) 
# convert back to lat/lon 
lonpt, latpt = m(xpt,ypt,inverse=True) 
m.plot(xpt,ypt,'go',markersize=17*mark_font,alpha=.8) # plot a blue dot there 
# put some text next to the dot, offset a little bit 
# (the offset is in map projection coordinates) 
plt.text(xpt,ypt,'17%' , fontsize=17,color='w') 


lon, lat = -104.237, 40.125 # Location of Boulder 
# convert to map projection coords. 
# Note that lon,lat can be scalars, lists or numpy arrays. 
xpt,ypt = m(lon,lat) 
# convert back to lat/lon 
lonpt, latpt = m(xpt,ypt,inverse=True) 
m.plot(xpt,ypt,'ro',markersize=16*mark_font,alpha=.8) # plot a blue dot there 
# put some text next to the dot, offset a little bit 
# (the offset is in map projection coordinates) 
plt.text(xpt,ypt,'16%' , fontsize=16,color='w') 

plt.show()