geom_area默认绘制堆积区域

时间:2018-11-30 00:41:35

标签: r ggplot2

我正在使用geom_area绘制一个非常简单的数据集。使用geom_line进行绘制时,一切正常,但是当我切换到geom_area时,会绘制出更高的值。查看图表,将是代表我的问题的最好方法:

require(tidyverse)

x <- structure(list(Time = 0:40, X15.DCIA = c(0, 1, 0.5, 0, 2, 2.5, 
      1, 0.5, 0, 1, 1.5, 1, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5, 3, 
      5, 7, 6.5, 5.5, 4, 3, 2, 1.5, 1, 0.25, 0, 0, 0, 0, 0, 0, 0), 
      X100.DCIA = c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 
      0, 0, 0, 0, 0, 0, 0, 0, 1.5, 7, 8, 7.5, 6.5, 5, 3.5, 2.25, 
      1.75, 1.1, 0.4, 0.1, 0, 0, 0, 0, 0, 0)),
      class = "data.frame", row.names = c(NA,-41L))

 x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) +
  geom_line(aes(color=prct.DCIA))


 x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) +
  geom_area(aes(fill=prct.DCIA))

plotst

这是我所期望的(数据的线图)。

但是随后查看geom_area,您会发现100DCIA已跃升至15。

我对说明感兴趣,而不是解决方法或解决方法。

注意:

这可能是一种解决方法:

x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) + 
      geom_polygon(aes(fill=prct.DCIA, alpha=0.5)) + guides(alpha=FALSE)

1 个答案:

答案 0 :(得分:3)

说明: 您的地块彼此堆叠。

geom_area图中红线之后看到的值是geom_line图中红线和蓝线的值之和。

如果将prct.DCIAfacet_grid()分开,您会清楚地看到这一点:

x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) +
  geom_area(aes(fill=prct.DCIA)) + facet_grid(.~prct.DCIA)

enter image description here

这仅仅是因为position = "stack" is the default argument in geom_area

geom_area(mapping = NULL, data = NULL, stat = "identity",
  position = "stack", na.rm = FALSE, show.legend = NA,
  inherit.aes = TRUE, ...)

人们可能会认为这是因为人们使用geom_area是因为他们想在图表上显示整个区域,而不是在某些线条下填充。通常,条形图或区域可能表示某物的数量,或者填充的区域表示某物,而点或线可能表示点估计,而线或点上方或下方的面积没有意义。

Cf。 the default argument for geom_lineposition = "identity"

geom_line(mapping = NULL, data = NULL, stat = "identity",
  position = "identity", na.rm = FALSE, show.legend = NA,
  inherit.aes = TRUE, ...)

修复: 如果您使用position = position_dodge(),则可以看到它们恢复为折线图的外观,红色区域绘制在蓝色区域的后面:

  x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) +
  geom_area(aes(fill=prct.DCIA), position = position_dodge())

enter image description here

您甚至可以将alpha <1设置为清晰可见:

x %>% gather(prct.DCIA, Vol, -Time) %>% ggplot(aes(x=Time, y=Vol)) +
  geom_area(aes(fill=prct.DCIA), position = position_dodge(), alpha = 0.5)

enter image description here