我在从 ggplot
中提取路径时遇到了问题,并陷入了错误。
下面给出的图像解释了我正在寻找的结果:(为说明目的而在图像编辑器中完成)
假设图1是我的原始图。 我要寻找的是以第一个点作为“F”点,并从该点向前行驶24小时。
Des %>%
mutate(nf = cumsum(ACT=="F")) %>% # build F-to-F groups
group_by(nf) %>%
mutate(first24h = as.numeric((DateTime-min(DateTime)) < (24*3600))) %>% # find the first 24h of each F-group
ggplot(aes(x=Loq, y=Las)) +
geom_path(aes(colour=first24h)) + scale_size(range = c(1, 2))+ geom_point()
Library(zoo)
full.time = seq(Des$DateTime[1], tail(Des$DateTime, 1), by=600) # new timeline with point at every 10 min
d.zoo = zoo(Des[,2:3], Des$DateTime) # convert to zoo object
d.full = as.data.frame(na.approx(d.zoo, xout=full.time)) # interpolate; result is also a zoo object
d.full$DateTime = as.POSIXct(rownames(d.full))
使用na.approx
进行插值时,为什么会出现错误?而在其他情况下则不会。
Error in approx(x[!na], y[!na], xout, ...) : need at least two non-NA values to interpolate In addition: Warning message: In xy.coords(x, y) : NAs introduced by coercion
将这两个data.frame
结合起来。每个F-F部分都在单独的图中绘制,并且仅显示距离F点不超过24小时的点。
library(dplyr)
library(ggplot)
Des %>%
select(ACT, DateTime) %>%
right_join(d.full, by="DateTime") %>%
mutate(ACT = ifelse(is.na(ACT),"",ACT)) %>%
mutate(nf = cumsum(ACT=="F")) %>%
group_by(nf) %>%
mutate(first24h = (DateTime-min(DateTime)) < (24*3600)) %>%
filter(first24h == TRUE) %>%
filter(first24h == 1) %>%
ggplot(Des, aes(x=Loq, y=Las,colour=ACT)) +
geom_path() + facet_wrap(~ nf)
错误
在 ggplot.data.frame(., Des, aes(x = Loq, y = Las, colour = ACT)) 中出错: 映射应该使用 aes 或 aes_string 创建
这是我的 Des
格式:
ID Las Loq ACT Time Date
1 12 13 R 23:20 1-1-01
1 13 12 F 23:40 1-1-01
1 13 11 F 00:00 2-1-01
1 15 10 R 00:20 2-1-01
1 12 06 W 00:40 2-1-01
1 11 09 F 01:00 2-1-01
1 12 10 R 01:20 2-1-01
so on...
ggplot
函数时去掉Data
参数。由于使用了管道符号,数据参数会被默认传递,因此你的第一个参数应是aes
。或者你可以在调用ggplot
之前去掉管道操作符。 - Benjamin.
替换Data
。 - Jaapinherits(mapping, "uneval") 中出现错误:找不到对象'Des.'
- user4993868dput(Des)
或dput(Des[sample(nrow(Des), 20),])
的输出结果? - Jaap