从点列表中查找质心并将其添加到绘图中

时间:2020-05-10 21:59:37

标签: r ggplot2

我试图找到点列表的质心,然后将它们添加到ggplot中。如果有人可以帮助您,那就太好了!我正在尝试使用包moveVis生成动画(说明GPS随时间的运动),但是ggplot2部分存在问题。

任何帮助将不胜感激!

#reorder timestamps in ascending order
df<-df[order(df$timestamp),]

#remove duplicates
df <- df[!duplicated(df$timestamp),]

#convert time to time class
df$timestamp <- as.POSIXct(df$timestamp, format = '%d/%m/%y %H:%M', tz='Singapore')

m <- moveVis::df2move(df, x = "location.long", y="location.lat",            time="timestamp",
            proj ="+proj=longlat +datum=WGS84 +no_defs",  
            track_id="troop2",
            removeDuplicatedTimestamps=T)

m <- moveVis::align_move(m, res = 180 , digit = 0, unit = "mins") 

#Modify axis if necessary
ext <- extent(m) * 6


frames2 = moveVis::frames_spatial(m, trace_show=F, ext= ext, equidistant = F, map_service= "carto",
            map_type = "light") %>%
            add_labels(title= "Monitoring Survey", caption = "(2019-2020)", 
                x = "Longitude", y="Latitude") %>%
                add_timestamps(type = "label") %>%
                add_progress(colour="white") %>%
                add_northarrow(colour="white",position="bottomleft") %>%
                add_scalebar(colour="black",position="bottomright", distance=NULL, units = "km"
                )

length(frames2)
frames2[[50]]

#add roost trees 
roost_cape <- data.frame(x = c(103.786764, 103.786764, 103.787969, 103.787969, 103.786764),   #see 1st and last pair is the same 
                   y = c(1.40130129 , 1.4009375, 1.4009375, 1.40130129,1.40130129))
roost_giraffe <- data.frame(x = c(103.7888074, 103.788807, 103.789893, 103.789893, 103.7888074),   #see 1st and last pair is the same 
                    y = c(1.399994287, 1.3989033, 1.3989033, 1.39999429, 1.399994287))
roost_elephant <- data.frame(x = c(103.785098785561, 103.785099, 103.785937, 103.785937, 103.7850988),   #see 1st and last pair is the same 
                    y = c(1.402473871, 1.40191181, 1.40191181, 1.40247387, 1.402473871))

#combine into df 
roost_cape$id <- "cape"
roost_giraffe$id <-"giraffe"
roost_elephant$id <- "elephant"  
roosts_all <- rbind(roost_cape,roost_giraffe,roost_elephant)     

#customise all frames using add_gg:     
frames3 = add_gg(frames2, gg = expr(geom_path(data = roosts_all, aes(x = x, y = y, group=id), 
                                            colour = "red", linetype = "dashed")) , data = roosts_all)                                 
frames3[[100]]                                            

##### stuck. 

在这一点上,我如何获得中点/质心或任何适当的位置来插入标签($ id)?

数据

df <- structure(list(location.long = c(103.78857, 103.78835, 103.78845, 
103.78845, 103.78845, 103.78845, 103.78845, 103.78565, 103.78565, 
103.78482, 103.78504, 103.78548, 103.78546, 103.78546, 103.78897, 
103.78963, 103.78982, 103.78812, 103.78897, 103.7875), location.lat = c(1.40311, 
1.40329, 1.40374, 1.40374, 1.40374, 1.40374, 1.40374, 1.40347, 
1.40347, 1.40305, 1.40249, 1.40303, 1.40228, 1.40228, 1.4038, 
1.40381, 1.40364, 1.40377, 1.4038, 1.40351), timestamp = c("7/6/19 7:50", 
"7/6/19 8:20", "7/6/19 8:42", "7/6/19 8:50", "7/6/19 9:20", "7/6/19 9:45", 
"7/6/19 10:10", "7/6/19 16:10", "7/6/19 16:40", "7/6/19 17:10", 
"7/6/19 17:40", "7/6/19 18:10", "7/6/19 18:40", "7/6/19 19:10", 
"25/6/19 7:05", "25/6/19 7:35", "25/6/19 8:05", "25/6/19 8:20", 
"25/6/19 8:35", "25/6/19 9:05"), troop = c("Main", "Main", "Main", 
"Main", "Main", "Main", "Main", "Main", "Main", "Main", "Main", 
"Main", "Main", "Main", "Main", "Main", "Main", "Main", "Main", 
"Main"), survey_method = c("Scan", "Scan", "Ad_libitum", "Scan", 
"Scan", "Scan", "Ad_libitum", "Scan", "Scan", "Scan", "Scan", 
"Scan", "Scan", "Scan", "Scan", "Scan", "Scan", "Ad_libitum", 
"Scan", "Scan"), data_tag = c("NSF-M1a", "NSF-M1a", "NSF-M1a", 
"NSF-M1a", "NSF-M1a", "NSF-M1a", "NSF-M1a", "NSF-M1a/R1", "NSF-M1a/R1", 
"NSF-M1a/R1", "NSF-M1a/R1", "NSF-M1a/R1", "NSF-M1a/R1", "NSF-M1a/R1", 
"NSF-M1b", "NSF-M1b", "NSF-M1b", "NSF-M1b", "NSF-M1b", "NSF-M1b"
), troop2 = c("NSF", "NSF", "NSF", "NSF", "NSF", "NSF", "NSF", 
"NSF", "NSF", "NSF", "NSF", "NSF", "NSF", "NSF", "NSF", "NSF", 
"NSF", "NSF", "NSF", "NSF")), row.names = c(NA, 20L), class = "data.frame")

0 个答案:

没有答案
相关问题