2017-04-05 106 views
2

基本上我有一个csv,里面充满了纬度和经度数据,我将其添加到数据框中的两个单独列中。然后用它来创建一个包含所有数据的地球仪。除了数据没有正确绘制,我不知道为什么。底图散点图不能正确绘制

读入数据文件并将其添加到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

欣赏的帮助。

编辑:我是从

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

你能分享代码段,5-10行数据,您在哪里注释数据点预计将出现在哪个国家/地区? –

+0

[是啊,它看起来像下面](http://i.imgur.com/9Cv0PYE.png) –

+0

谢谢,你可以追加输出作为文本的问题,这样很容易复制?你可以执行'print(data.head())',并在这里复制它。此外,您是否绘制了这个子集以确认这些点在地图上也放错了位置? –

回答

0

您通过x, y = m1(x, y)convert your longitude and latitude to map coordinates需要读取数据。在下面的代码,我取代了线,你的矩阵变换与这一行,我想这是更清晰:

此代码为我工作

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数组。 –