堆积区域图中的ggplot孔

时间:2016-04-08 22:50:34

标签: r ggplot2 stacked-area-chart

这是a link to my data

我使用以下代码:

#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

产生以下图表: enter image description here

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

previously had this issue and asked about it,然后提供的答案是我需要按组排序我的数据,然后是年份。当时,那个答案修好了我的洞。但是,这次似乎没有消除所有漏洞。有什么帮助吗?

3 个答案:

答案 0 :(得分:8)

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

例如,查看最左边的差距。橄榄区域始于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

正如您所看到的,这三个新值完全符合您图中的三个间隙。现在,您可以将这些新数据框与data结合使用,并按照以前的方式进行排序:

data_complete <- bind_rows(data, first_years) %>%
                 arrange(year, group)

然后情节没有差距:

ggplot(data_complete, aes(x=year,y=value, fill=group)) +
  geom_area()

enter image description here

答案 1 :(得分:0)

@ Stibu的答案可能是最好的,但是对于我们这些不是很精通并且不知道如何通过R来查找缺失行并用零填充的数据集的人,我用一种不同的方法解决了这个问题。

对于我的情况,我创建了一个虚拟数据集,其中包含所有年份和所有组的零,然后将其附加到我的原始数据集。这样我就添加了多年的行,之前几乎没有数据行。在按年份和组聚合之后,我的聚合数据集随后包含零行,而不是根本不存在任何行。这为我删除了所有这些奇怪的空白。

答案 2 :(得分:-1)

我发现将表保存到csv并使用python的matplotlib函数stackplotdemo)更简单,这似乎没有负数问题。