堆积面积图中的ggplot孔

ggplot holes in 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

生成以下图表:

如您所见,这张图表的三个不同部分有奇怪的洞。

,然后提供的答案是我需要按组和年份对数据进行排序。当时,那个答案解决了我的漏洞。不过,这次似乎并没有消除所有的漏洞。有帮助吗?

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

例如,看最左边的空隙。橄榄区紧接在 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()

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

@Stibu 的回答可能是最好的,但对于我们这些不太了解 R 并且不知道如何使用 R 遍历数据集以查找丢失的行并用零填充它们的人来说,我解决了这个问题问题有点不同。

就我而言,我为所有年份和所有组创建了一个包含零的虚拟数据集,然后将其附加到我的原始数据集。通过这种方式,我在之前根本没有数据行的地方添加了多年的行。按年份和组聚合后,我的聚合数据集包含零行,而不是根本不存在行。这为我消除了所有那些奇怪的差距。

最好是简单地添加:pos = "identity",例如从你上面的代码:

ggplot(aes(x=year,y=value, fill=group), pos = "identity")