填补geom_area中的白色空白

时间:2015-07-08 13:40:08

标签: r ggplot2

我有一个数据框,其中包含某些因素的每日数据(" fill" var)我想用ggplot2::geom_area函数绘制一个区域图,但可能会丢失" fill& #34;第0天或最后一天的值。

df <- data.frame(x = do.call(c, mapply(rep, seq(Sys.Date() - 2, Sys.Date(), by = 1), c(2, 3, 2))), 
                 y = 1, 
                 fill = c("A", "B", "A", "B", "C", "A", "C"))

x y fill
1 2015-07-06 1    A
2 2015-07-06 1    B
3 2015-07-07 1    A
4 2015-07-07 1    B
5 2015-07-07 1    C
6 2015-07-08 1    A
7 2015-07-08 1    C  

如果您尝试绘制区域:

library(plyr)
library(dplyr)
library(ggplot2)

df %>% 
  group_by(x) %>% 
  mutate(freq = y / sum(y)) %>% 
  ggplot(aes(x, freq, fill = fill)) +
  geom_area()
你得到了这个: enter image description here

填充因子X的回归将从值X的第一次出现的那天开始,并结束该因子的最后一次出现的那天。 因此,如果不是所有现有值都出现在第0天和最后一天,则该图将获得白色间隙。

我认为我可以通过在那些日子里添加缺失因子(y = 0)来强制回归从第0天开始到最后一天结束,但它似乎仅适用于缺少第1天的数据:

df <- arrange(df, x)

li <- split(df, df$x)

li[[1]] <- 
      ldply(li, function(x) 
        anti_join(x, li[[1]], by = "fill"), .id = NULL) %>% 
      mutate(x = as.Date(names(li[1])),
             y = 0) %>% 
      distinct %>% 
      bind_rows(li[[1]], .)

li[[length(li)]] <- 
  ldply(li, function(x) 
    anti_join(x, last(li), by = "fill"), .id = NULL) %>% 
  mutate(x = as.Date(last(names(li))),
         y = 0) %>% 
  distinct %>% 
  bind_rows(last(li), .)

df.m <- bind_rows(li)

df.m %>% 
  group_by(x) %>% 
  mutate(freq = y / sum(y)) %>% 
  ggplot(aes(x, freq, fill = fill)) +
  geom_area()

enter image description here

您是否有任何想法填补空白或任何建议?感谢

(也许你会认为,如果有很多缺失值,那么区域图可能是一个糟糕的数据可视化,但我的实际数据中没有很多缺失的值,而且它们都在更长的一段时间,所以我在开始或结束时只有一点差距,但它可见但我想隐藏它)

请告诉我,如果不清楚我在问什么,我会尽力而为。

0 个答案:

没有答案