我正在处理数据框,如下所示。 x和y是轨迹随时间的墨卡托x,y坐标。具有相同VoyageID的行是属于相同轨迹的点。正如我们所看到的那样,所有0的行都将不同的轨迹分开。
VoyageID X Y Time
27 2 -7.35857534 2.09175178 1.29471228
28 2 -7.35863779 2.09167080 1.29471234
29 2 -7.35882203 2.09156224 1.29471240
30 2 -7.35908808 2.09147633 1.29471246
31 2 -7.35941313 2.09134900 1.29471252
32 2 -7.35970112 2.09123810 1.29471258
33 0 0.0000000 0.0000000 0.0000000
34 3 -7.34769342 2.09628155 1.29498270
35 3 -7.34811254 2.09626864 1.29498282
36 3 -7.34853711 2.09625315 1.29498288
37 3 -7.34889255 2.09622732 1.29498294
38 0 0.0000000 0.0000000 0.0000000
39 4 -7.35857089 2.09176469 1.29531606
40 4 -7.35862989 2.09169697 1.29531612
41 4 -7.35869312 2.09162679 1.29531618
42 4 -7.35876692 2.09158959 1.29531624
43 0 0.0000000 0.0000000 0.0000000
我希望通过以下两种方式向我建议可视化这些轨迹的最佳方法:
如何在简单的2d线图上绘制x,y坐标?
如何在传单地图上绘制带有x,y坐标的轨迹(使用Folium或任何其他真实地图)?
另外,如何管理不同轨迹的点(它们用0分隔)。我是python以及matplotlib的新手,所以请尽可能给我提供一些详细的答案。 提前谢谢。
答案 0 :(得分:0)
您可以将数据帧转换为JSON格式,任何Javascript映射库都可以轻松处理。
例如,使用Pandas DataFrame.to_json
方法会转换此数据帧:
voyage id x y time
27 2 -7.35857534 2.09175178 1.29471228
28 2 -7.35863779 2.09167080 1.29471234
29 2 -7.35882203 2.09156224 1.29471240
进入这个JSON数组:
[{
"voyage": 27,
"id": 2,
"x": -7.35857534,
"y": 2.09175178,
"time": 1.29471228
}, {
"voyage": 28,
"id": 2,
"x": -7.35863779,
"y": 2.09167080,
"time": 1.29471234
}, {
"voyage": 29,
"id": 2,
"x": -7.35882203,
"y": 2.09156224,
"time": 1.29471240
}]
生成的文件可以通过Javascript加载,并与您的映射库一起使用,如Leaflet:
// Start a new map
var map = new L.Map('leaflet', {'center': [0, 0], 'zoom': 0});
// Load file
fetch('data.json').then(function(response) {
// Return JSON
return response.json().then(function (arr) {
// Add a line
var line = new L.Polyline([]).addTo(map);
// Iterate the objects in the array
arr.forEach(function (obj) {
// If ID is not 0
if (obj.id) {
// Add point to line
line.addLatLng(obj.y, obj.x);
// ID is 0
} else {
// Start new line
line = new L.Polyline([]).addTo(map);
}
});
});
});