我使用以下代码:
#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
如您所见,此图表的三个不同部分有奇数洞。
我previously had this issue and asked about it,然后提供的答案是我需要按组排序我的数据,然后是年份。当时,那个答案修好了我的洞。但是,这次似乎没有消除所有漏洞。有什么帮助吗?
答案 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()
答案 1 :(得分:0)
对于我的情况,我创建了一个虚拟数据集,其中包含所有年份和所有组的零,然后将其附加到我的原始数据集。这样我就添加了多年的行,之前几乎没有数据行。在按年份和组聚合之后,我的聚合数据集随后包含零行,而不是根本不存在任何行。这为我删除了所有这些奇怪的空白。
答案 2 :(得分:-1)
我发现将表保存到csv并使用python的matplotlib函数stackplot
(demo)更简单,这似乎没有负数问题。