9

这是我的数据的链接

我使用以下代码:

#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

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

正如你所看到的,这张图表的三个不同部分都有奇怪的洞。

之前遇到过这个问题并询问过,然后提供的答案是我需要按组和年份对数据进行排序。当时,这个答案修复了我的漏洞。然而,这一次似乎并没有消除所有的漏洞。有什么帮助吗?

4

3 回答 3

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

如您所见,这三个新值恰好适合您的绘图中的三个空白。data现在,您可以像以前一样将这些新数据框与您的和排序组合:

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

然后情节没有差距:

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

在此处输入图像描述

于 2016-04-09T12:31:02.017 回答
0

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

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

于 2017-05-26T18:19:19.143 回答
-1

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

于 2017-01-24T09:54:21.037 回答