geom_area在图层之间产生空白区域

时间:2019-03-28 13:08:30

标签: r ggplot2 geom-area

我在data.frame tbl中有以下数据:

library(tibble)

tbl <- structure(list(
    year = c(2007, 2008, 2008, 2009, 2009, 2010, 2010, 2010, 2011, 2011, 2011, 2011, 2012, 2012, 2012, 2013, 2013, 2013, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2016, 2016, 2016, 2016, 2017, 2017, 2017, 2018, 2018, 2018, NA), 
    Type = c("RLR", "PLR", "RLR", "PLR", "RLR", "PLR", "RLR", "RR", "PLR", "RLR", "RR", "Supplement", "PLR", "RLR", "RR", "PLR", "RLR", "RR", "PLR", "RLR", "RR", "LR", "PLR", "RLR", "RR", "LR", "Other", "PLR", "RR", "LR", "Other", "RR", "LR", "Other", "RR", "RR"), 
    `n()` = c(4L, 2L, 35L, 14L, 41L, 34L, 37L, 61L, 40L, 21L, 149L, 1L, 38L, 17L, 134L, 41L, 4L, 115L, 23L, 3L, 76L, 1L, 27L, 2L, 78L, 28L, 2L, 4L, 36L, 33L, 5L, 32L, 22L, 3L, 36L, 5L)), 
  row.names = c(NA, -36L), 
  class = c("grouped_df", "tbl_df", "tbl", "data.frame"), 
  groups = structure(list(
    year = c(2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, NA), 
    .rows = list(1L, 2:3, 4:5, 6:8, 9:12, 13:15, 16:18, 19:21, 22:25, 26:29, 30:32, 33:35, 36L)), 
  row.names = c(NA, -13L), 
  class = c("tbl_df", "tbl", "data.frame"), 
  .drop = TRUE))

我想使用以下代码创建分层(堆叠)的面积图:

ggplot(tbl,aes(x=year,y=`n()`,fill=Type)) +
geom_area(position="stack") +
theme_light() +
scale_colour_brewer(type="qual",palette = 1) +
ylab("Count")

但是我得到的结果在各层之间的某些地方有奇怪的空白:

area chart

我发现了this question,但这似乎不是我遇到的问题-我的数据中没有负数。

有什么办法解决这个问题吗?

这里似乎是这样:在不同的时间添加了新的Type,而从整个列表中删除了旧的Type。发生这种情况时,这些区域的区域以垂直的直线开始,但是此新区域上方的geom_area的区域的对角线从0到该层的新起点。对我来说,这听起来不合理。如何使ggplot将所有颜色绘制为另一种颜色而不是尝试创建色带?我认为这就是std::make_unique<Foo> ...

的重点。

1 个答案:

答案 0 :(得分:3)

缺少某些(年份,类型)组合(隐式零)。如果添加它们(显式零),则没有空白区域。

[uwsgi]
module = wsgi:app

master = true
processes = 5

socket = myproject.sock
chmod-socket = 660
vacuum = true

die-on-term = true

reprex package(v0.2.1)于2019-03-28创建