滚动中位数在ggplot2中

时间:2016-09-28 08:27:44

标签: r ggplot2

我想在ggplot2中为我的数据添加滚动中位数。计算ggplot aes和data.frame本身的滚动中位数不会产生类似的结果(见图)。

enter image description here

我正在寻找ggplot2中的解决方案,该解决方案产生与data.frame计算中相同的结果。我知道这可以用ggseas::stat_rollapplyr完成,但更喜欢基础ggplot2中的解决方案。

代码;

library(ggplot2)
library(data.table)
library(zoo)
library(gridExtra)

# set up dummy data
set.seed(123)
x = data.table(
  date = rep( seq(from = as.Date("2016-01-01"), to = as.Date("2016-04-01"), by = "day"), 2),
  y = c(5 + runif(92), 6 + runif(92)),
  label = c(rep("A", 92), rep("B", 92))
)

x[, `:=` (
  roll = rollmedian(y, k = 15, fill = NA, align = "center")
  ), by = label]

# plots
theme_set(theme_bw())
p = ggplot(x) + 
  geom_line(aes(date, y), col = "lightgrey") + 
  facet_wrap(~label)

# within aes
p1 = p + 
  geom_line(aes(date, rollmedian(y, k = 15, fill = NA, align = "center"))) +
  labs(title = "within aes")

# calculated in data.frame
p2 = p + 
  geom_line(aes(date, roll)) +
  labs(title = "within data.frame")

grid.arrange(p1, p2)

sessionInfo()

    R version 3.2.3 (2015-12-10)
    Platform: x86_64-pc-linux-gnu (64-bit)
    Running under: Ubuntu 16.04.1 LTS

    locale:
     [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C               LC_TIME=nl_NL.UTF-8        LC_COLLATE=en_US.UTF-8     LC_MONETARY=nl_NL.UTF-8    LC_MESSAGES=en_US.UTF-8    LC_PAPER=nl_NL.UTF-8      
     [8] LC_NAME=C                  LC_ADDRESS=C               LC_TELEPHONE=C             LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=C       

    attached base packages:
    [1] stats     graphics  grDevices utils     datasets  methods   base     

    other attached packages:
    [1] zoo_1.7-13         magrittr_1.5       data.table_1.9.7   ggplot2_2.1.0.9000

    loaded via a namespace (and not attached):
     [1] labeling_0.3     colorspace_1.2-6 scales_0.4.0     assertthat_0.1   plyr_1.8.4       rsconnect_0.4.3  tools_3.2.3      gtable_0.2.0     tibble_1.2       Rcpp_0.12.

7      grid_3.2.3       munsell_0.4.3   
[13] lattice_0.20-33 

0 个答案:

没有答案