堆积区域图中的ggplot孔

Jim*_*Jim 8 r ggplot2 stacked-area-chart

这是我的数据的链接.

我使用以下代码:

#read in data
data = read.csv("ggplot_data.csv")

#order by group then year
data = arrange(data, group, year)

#generage ggplot stacked area chart
plot = ggplot(data, aes(x=year,y=value, fill=group)) +
  geom_area() 
plot
Run Code Online (Sandbox Code Playgroud)

这产生了以下图表: 在此输入图像描述

如您所见,此图表的三个不同部分有奇数洞.

以前遇到过这个问题并询问过这个问题,然后提供的答案是我需要按组对数据进行排序,然后是年份.当时,那个答案修好了我的洞.但是,这次似乎没有消除所有漏洞.有帮助吗?

Sti*_*ibu 9

差距的原因是某些时间序列比其他时间序列开始得晚.当出现第一个非消失值时,新区域以非连续跳转开始.然而,正上方的区域通过线性插值连接到下一个点.这导致了差距.

例如,看看最左边的差距.橄榄区域始于1982年垂直跳跃的间隙之后.然而,绿色区域从1981年(橄榄区域为零)的值线性增加到1982年(橄榄区突然贡献的值)的值.

你可以做的是,例如,在1975年之后开始的每个时间序列的开头添加一个零值.我使用dplyr功能来创建这些额外的第一年的数据框:

first_years <- group_by(data, group, group_id) %>%
               summarise(year = min(year) - 1) %>%
               filter(year > 1974) %>%
               mutate(value = 0, value_pct = 0)
first_years
## Source: local data frame [3 x 5] 
## Groups: group [3]
## 
##    group group_id  year value value_pct
##   (fctr)    (int) (dbl) (dbl)     (dbl)
## 1      c    10006  1981     0         0
## 2      e    10022  2010     0         0
## 3      i    24060  2002     0         0
Run Code Online (Sandbox Code Playgroud)

如您所见,这三个新值恰好符合图中的三个间隙.现在,您可以将这些新数据框与data以前相同的方式组合并进行排序:

data_complete <- bind_rows(data, first_years) %>%
                 arrange(year, group)
Run Code Online (Sandbox Code Playgroud)

然后情节没有差距:

ggplot(data_complete, aes(x=year,y=value, fill=group)) +
  geom_area()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述