我以不规则的时间间隔(通常每个月但每个月的同一天都不进行测量)测量水质。我已经用下面的代码在令人惊异的ggplot中绘制了这些图形,并将所有测量结果连接在一起。

但是,当几个月没有进行任何测量时,也存在差距。我想用另一种线型或颜色绘制这些点之间的线(例如,如果间隙大于60天,则用虚线和灰色表示)。我是否需要为此拆分数据?我该如何处理?

library(ggplot2)
library(lubridate)

xdate <- as.Date(c(seq.POSIXt(ymd("2005-01-01"), ymd("2007-03-04"), by = "30 days"),
           seq.POSIXt(ymd("2007-07-03"), ymd("2007-12-31"), by = "28 days"),
           seq.POSIXt(ymd("2008-05-15"), ymd("2010-10-10"), by = "25 days"),
           seq.POSIXt(ymd("2012-01-01"), ymd("2014-12-31"), by = "31 days")))

set.seed(321)
df <- data.frame(date = rep(xdate,3), par=rep(c("Cl","PO4","NO3")), y=rnorm(318,1,0.2))

ggplot(df, aes(x=date, y=y)) +
  geom_point(size=2) +
  geom_line() +
  facet_wrap(~par, nrow=3)

r - 在ggplot中更改时间序列中间隔的线型-LMLPHP

最佳答案

这应该让你靠近

library(dplyr)
df <- df %>% group_by(par) %>%
             arrange(date) %>%
             mutate(gap = cumsum(c(0, diff(date) > 60)))
ggplot(df, aes(x=date, y=y, colour=factor(gap))) +
    geom_point(size=2) +
    geom_line() +
    facet_wrap(~par, nrow=3)

摆弄每组的ID和起点/终点,应该能够将变量映射到线型。

r - 在ggplot中更改时间序列中间隔的线型-LMLPHP

关于r - 在ggplot中更改时间序列中间隔的线型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32236620/

10-12 19:52