2017-08-01 29 views
0

我想创建一个比例geom_area图。我认为必须有可能直接在ggplot2中做到这一点,而不是事先计算总数和比例。 我创建了一个最小工作示例,它显示了我现在得到的内容。直接在ggplot2中创建比例geom_area图

library(data.table) 
library(dplyr) 
library(zoo) 
dt <- structure(list(Date = structure(c(2000, 2000, 2000, 2000, 2000, 
            2000.25, 2000.25, 2000.25, 2000.25, 2000.25, 2000.5, 2000.5, 
            2000.5, 2000.5, 2000.5, 2000.75, 2000.75, 2000.75, 2000.75, 2000.75, 
            2001, 2001, 2001, 2001, 2001, 2001.25, 2001.25, 2001.25, 2001.25, 
            2001.25, 2001.5, 2001.5, 2001.5, 2001.5, 2001.5, 2001.75, 2001.75, 
            2001.75, 2001.75, 2001.75, 2002, 2002, 2002, 2002, 2002, 2002.25, 
            2002.25, 2002.25, 2002.25, 2002.25, 2002.5, 2002.5, 2002.5, 2002.5, 
            2002.5, 2002.75, 2002.75, 2002.75, 2002.75, 2002.75), class = "yearqtr"), 
       Category = c(2L, NA, 1L, 4L, 3L, 2L, NA, 1L, 4L, 3L, 2L, 
          NA, 1L, 4L, 3L, 2L, NA, 1L, 4L, 3L, 2L, NA, 1L, 4L, 3L, 2L, 
          NA, 1L, 4L, 3L, 2L, 1L, 4L, NA, 3L, 2L, 1L, 4L, NA, 3L, 2L, 
          1L, 4L, NA, 3L, 2L, 1L, 4L, NA, 3L, 2L, 1L, 4L, NA, 3L, 2L, 
          1L, 4L, NA, 3L), Value = c(51, 15, 17, 3, 37, 50, 16, 17, 
                 3, 47, 49, 16, 17, 3, 37, 53, 16, 17, 2, 38, 57, 2, 16, 2, 
                 39, 58, 2, 16, 2, 39, 59, 17, 2, 2, 38, 59, 16, 3, 2, 37, 
                 58, 17, 3, 3, 35, 58, 17, 3, 3, 36, 56, 17, 3, 3, 36, 57, 
                 17, 3, 3, 37)) 
,.Names = c("Date", "Category", "Value") 
, class = c("data.table", "data.frame"), row.names = c(NA, -60L)) 
data.table::melt(dt, id.vars = c("Date", "Category") 
, measure.vars = c("Value") 
) %>% ggplot(data = ., aes(x = Date, y = value, fill = as.factor(Category))) + 
    geom_area(stat = "identity") + 
    theme(legend.title=element_blank()) + 
    scale_x_yearqtr(format = "%Y-Q%q",n = 8, expand = c(0,0)) 

Resulting graphic 我想一切扩展到0到1的空间,让它填满它完全。

回答

1

如果我理解正确的话,你需要的是增加position = "fill"geom_area()

data.table::melt(dt, id.vars = c("Date", "Category") 
       , measure.vars = c("Value") 
) %>% ggplot(data = ., aes(x = Date, y = value, fill = as.factor(Category))) + 
    geom_area(stat = "identity", position = "fill") + 
    theme(legend.title=element_blank()) + 
    scale_x_yearqtr(format = "%Y-Q%q",n = 8, expand = c(0,0)) 

结果:

enter image description here

+0

是啊,我总是顺便困惑有多难是在ggplot2文档中查找信息以及命名选项的奇怪程度。从'geom_area' help:'位置:位置调整,或者作为一个字符串,或者调用位置调整函数的结果.' ;-) 非常感谢。 – hannes101

+0

是的,在文档中找到正确的信息可能会很痛苦。我很高兴我能帮上忙! –