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"))

しかし、私のはるかに大規模な (数十万の観測) データセットの場合、これは、各観測を適切に識別するためのもう少しの作業がなければ、解決策として意味がありません。追加のデータ探索の一環として、いずれにせよ最終的には確実に行うことになります。Rにポイントを接続する方法を伝えるためにgeom_lineで発見していない引数はありますか?

確かに、私は ggplot2 を使用するのにまだ初心者なので、非常に簡単なことを見逃していたら申し訳ありません。私は他の多くのコードと学習に取り組んでおり、少なくとも他のいくつかのパッケージを使用して、この GPS データと他の利用可能な空間データを操作しています。ちょっと圧倒されます...アイデアがたくさんあるのに、ノウハウはほとんどありません! これのより大きなポイントは、私の研究生物による運動パターンと空間の使用を視覚化する (そして最終的には分析する) ことですが、今のところ、実際に慣れるためにさまざまな方法でデータを視覚化することは素晴らしいことです.

空間データと GPS データを操作するための推奨パッケージがあれば、ぜひ教えてください。

4

1 に答える 1

2

使用するには、日付/時刻オブジェクトで並べ替えられた行が必要ですgeom_path。これがデータを表示する最良の方法だと思うので、大規模なデータセットを効率的に並べ替える方法を見つけることに集中する必要があります。明らかに、使用しているデータセットの規模を把握するのは良いことです。何百万行?おそらく数十億?

幸いなことに、data.tableパッケージはこれを非常にうまく行っています。これは、テーブルが最初にソートされた ID 列 X、1 秒の観測値のソートされていない時間列、および x と y の 2 つのランダム列を含む、100 万行のテーブルの例です。私のラップトップでは 1 秒未満かかります。 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 に答える