【发布时间】:2023-04-03 03:08:01
【问题描述】:
我想创建类似的东西:
我使用 ggplot2 运行:
恕我直言,实现这一目标的最佳方法是使用 geom_path,但我遇到了一些问题。 我的数据库有 3 列: ID(运行的id,对数据分组有用) 纬度 朗 这里有一个示例: https://docs.google.com/spreadsheets/d/1lUUwVUzt4wCvbDLSrusfH9pVFXw-8icC8mLJ0QKBYKU/edit?usp=sharing
附言。抱歉,数据太大,无法输入
1:如何计算路径的强度。我正在考虑计算一个范围内(例如 50m)内的坐标数(纬度,经度)。 所以几个纬度,经度附近有很多坐标。这是一个强度很高的点。问题在于数据的维度。我有很多行,我的计算能力无法计算出这个大矩阵(著名的错误:无法分配向量)。 我克服错误的解决方案是计算每行距离的循环:
npoints_2<-c()
for (i in 1:nrow(db)){
vector_distance<-distm(db[i,2:3], db[-i,2:3], fun = distHaversine) #for each row calculate the distance between the point and the dataset
npoints<-sum(vector_distance<50) #count points within 50m
npoints_2<-c(npoints_2,npoints)
}
因为它是一个循环,所以这个解决方案非常慢(而且不可能)。 必须有一个更聪明的解决方案,但可能我太菜鸟,所以请帮助我。
这种方法经过几次运行的结果是这样的:
ggplot(db, aes(lon,lat, group=id,color = log(n_punti_2))) +
geom_path() +
scale_colour_continuous(low = "darkblue", high = "cyan")
这就引入了第二个问题:相似的路线,坐标差异不大。
将相似路线组合在一起的最佳方式是什么?恕我直言,出于图形原因,最好使用一条强度高的单行,而不是使用 2/3/n 条具有相似强度的非常相似的行
提前感谢您的帮助。非常感谢!!!
【问题讨论】:
-
P.S.欢迎来到 SO。如果您需要更好的帮助,请创建一个可重现的示例,包括示例数据。不需要很大,但应该能触及问题的核心。
-
添加的数据库示例。
-
我对我的 strava 输出做了类似的事情,并发现以有限的努力实现类似效果的一种方法是使用较低的 alpha 值,例如geom_path 为 0.3
-
@Tjebo: mappinglondon.co.uk/2018/strava-labs-heatmap-of-runners 这是我使用的地图的来源。正如 Miff 所说,您可以通过以下链接查看 Strava 的整个热图:strava.com/heatmap#7.00/-120.90000/38.36000/hot/all PS。我重新加载谷歌表上的数据。希望现在格式正确。谢谢你的回答,我会尽快检查geom点密度的功能(真的,我不知道)。
标签: r ggplot2 gps geospatial heatmap