我有一个包含多天数据的时间序列。在每一天之间有一个没有数据点的时期。在使用ggplot2
?
如下所示的人为例子,如何摆脱没有数据的两个时期?
代码:
Time = Sys.time()+(seq(1,100)*60+c(rep(1,100)*3600*24, rep(2, 100)*3600*24, rep(3, 100)*3600*24))
Value = rnorm(length(Time))
g <- ggplot()
g <- g + geom_line (aes(x=Time, y=Value))
g
答案 0 :(得分:17)
首先,创建一个分组变量。如果时差大于1分钟,则两组不同:
Group <- c(0, cumsum(diff(Time) > 1))
现在可以使用facet_grid
和参数scales = "free_x"
:
library(ggplot2)
g <- ggplot(data.frame(Time, Value, Group)) +
geom_line (aes(x=Time, y=Value)) +
facet_grid(~ Group, scales = "free_x")
答案 1 :(得分:9)
问题是ggplot2如何知道你缺少值?我看到两个选择:
NA
值添加另一个表示“组”的变量。例如,
dd = data.frame(Time, Value)
##type contains three distinct values
dd$type = factor(cumsum(c(0, as.numeric(diff(dd$Time) - 1))))
##Plot, but use the group aesthetic
ggplot(dd, aes(x=Time, y=Value)) +
geom_line (aes(group=type))
给出
答案 2 :(得分:3)
csgillespie提到NA填充,但更简单的方法是在每个块后添加一个NA:
Value[seq(1,length(Value)-1,by=100)]=NA
其中-1避免警告。