1

我想绘制纬度与经度,并通过日期和时间连接点,我已将其存储在 POSIXlt 类的对象中。我有很多很多 GPS 点,但这里有一小部分我想使用 ggplot2 绘制。

我的数据是这样的:

Description             lat         lon
6/16/2012 17:22         12.117017   -89.69692
6/17/2012 9:15          12.1178     -89.69675
6/17/2012 9:33          12.117783   -89.69673
6/17/2012 10:19         12.11785    -89.69665
6/17/2012 10:45         12.11775    -89.69677
6/17/2012 11:22         12.1178     -89.69673
6/17/2012 11:39         12.117817   -89.69662
6/17/2012 11:59         12.117717   -89.69677
6/17/2012 12:10         12.117717   -89.69655
6/16/2012 16:38         12.11795    -89.6965
6/16/2012 18:29         12.1178     -89.69688
6/16/2012 17:11         12.117417   -89.69703
6/16/2012 17:36         12.116967   -89.69668
6/16/2012 17:50         12.117217   -89.69695
6/16/2012 18:02         12.117583   -89.69715
6/16/2012 18:15         12.11785    -89.69665
6/16/2012 18:27         12.117683   -89.69632

我有一张地图,我正在将这些点绘制到上面。

我可以很好地绘制点

plot1 <- map + geom_point(data=dat, aes(x = lon, y  = lat))  

map 是我用 制作的一个对象ggmap,但在这里包含它并不重要。lon以下代码随着增加产生一条连接点的线

plot1+geom_line(data=dat, aes(x=lon,y=lat,colour="red"))

我不知道如何通过向量 POSIXlt 对象连接点Description 我知道在这个小例子中我可以很容易地使用类似的东西重新排序点,并使用以下代码dat2 <- dat[with(dat, order(Description)), ]重新制作 plot1并制作所需的图:dat2

plot1+geom_path(data=dat2, aes(x = lond, y  = latd, colour="red"))

但是对于我更大的(数十万个观察)数据集,如果没有更多的工作来正确识别每个观察,这作为一种解决方案是没有意义的,作为额外数据探索的一部分,我肯定最终会这样做。有没有我在 geom_line 中没有发现的论点来告诉 R 如何连接这些点?

诚然,我仍然是使用 ggplot2 的新手,因此,如果我错过了一些非常简单的事情,我深表歉意。我一直在编写许多其他代码并学习或至少使用其他几个包来处理这些 GPS 数据以及其他可用的空间数据。这一切都有点压倒性......这么多的想法,这么少的诀窍!更大的一点是可视化(并最终分析)我的研究生物体的运动模式和空间使用,但就目前而言,以各种方式可视化数据以真正熟悉它会很棒。

如果您有任何推荐的用于处理空间数据和 GPS 数据的软件包,我也很想听听它们。

4

1 回答 1

2

您需要按日期/时间对象排序的行才能使用geom_path。由于我认为这是显示数据的最佳方式,我们应该专注于寻找一种有效的方式来对大型数据集进行排序。显然,最好了解您正在使用的数据集的规模。数百万行?也许是数十亿?!

幸运的是,这个data.table包确实做得很好。这是一个 100 万行表的示例,其 ID 列 X,该表最初是在该列上排序的,一个未排序的 1 秒观察时间列,以及 x 和 y 的两个随机列,在我的笔记本电脑上花费 < 1s t 根据日期/时间排序:

set.seed(123)
require(data.table)

#  Rows ordered on X, random order of unique date/time values of 1 second observations
df <- data.frame( ID = seq.int(1e6) , Desc = as.POSIXct(sample(1e6),origin=Sys.Date()) , x = runif(1e6) , y = runif(1e6) )
head(df)
#  ID                Desc         x         y
#1  1 2013-05-25 02:39:39 0.2363783 0.1387404
#2  2 2013-05-25 23:58:17 0.1192702 0.1284918
#3  3 2013-05-21 17:41:57 0.8599183 0.6301114
#4  4 2013-05-23 16:12:42 0.8089243 0.7919304
#5  5 2013-05-21 08:17:28 0.8197109 0.4568693
#6  6 2013-05-22 17:57:23 0.4611204 0.5358536
#  Convert to data.table
DT <- data.table(df)

#  Sort on 'Desc'
setkey(DT , Desc)
head(DT)
#          ID                Desc         x          y
#1: 544945 2013-05-18 01:00:01 0.7052422 0.52030877
#2: 886165 2013-05-18 01:00:02 0.2256636 0.04391553
#3: 893690 2013-05-18 01:00:03 0.1860687 0.30978506
#4: 932276 2013-05-18 01:00:04 0.6305562 0.65188810
#5: 407622 2013-05-18 01:00:05 0.5355992 0.98146120
#6: 138936 2013-05-18 01:00:06 0.5999025 0.81722902


#  Make data.frame to from this to use with ggplot2 (not sure if you can't just use the data.table directly)
df2 <- DT

因此,在您的情况下,您可以尝试以下操作:

datDT <- data.table(dat)
setkey(datDT , Description)
dat2 <- datDT
于 2013-05-18T22:46:32.370 回答