数据解释
用作构建堆积面积图的输入的数据框需要 3 列:
x:用于X轴的数字变量,通常是 一时间。
y:用于 Y 轴的数字变量。
组:分组。
图表是使用该函数构建的:geom_area()
基本绘图
#导入函数包
library(ggplot2)
library(dplyr)
# 创建一个数据集
time <- as.numeric(rep(seq(1,7),each=7)) # x Axis
time
## [1] 1 1 1 1 1 1 1 2 2 2 2 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5 5 5 6 6 6
## [39] 6 6 6 6 7 7 7 7 7 7 7
value <- runif(49, 10, 100) # y Axis
value
## [1] 54.01599 84.57008 33.12773 17.52322 71.92345 65.12986 53.44853 33.82270
## [9] 44.03269 46.74773 81.35168 85.29474 71.14719 11.32227 16.20615 84.74430
## [17] 73.21043 26.23366 88.28483 26.04675 57.01979 94.25706 35.39703 47.22172
## [25] 70.75864 54.10606 68.55687 17.19584 22.63922 16.55235 25.74752 61.81437
## [33] 32.13874 58.02742 60.86489 29.71389 83.67461 61.71081 61.66240 27.12170
## [41] 66.36314 98.16680 82.10922 25.30800 53.20924 92.68590 19.36892 49.13718
## [49] 78.03089
group <- rep(LETTERS[1:7],times=7) # group, one shape per group
group
## [1] "A" "B" "C" "D" "E" "F" "G" "A" "B" "C" "D" "E" "F" "G" "A" "B" "C" "D" "E"
## [20] "F" "G" "A" "B" "C" "D" "E" "F" "G" "A" "B" "C" "D" "E" "F" "G" "A" "B" "C"
## [39] "D" "E" "F" "G" "A" "B" "C" "D" "E" "F" "G"
data <- data.frame(time, value, group)
head(data)
## time value group
## 1 1 54.01599 A
## 2 1 84.57008 B
## 3 1 33.12773 C
## 4 1 17.52322 D
## 5 1 71.92345 E
## 6 1 65.12986 F
#堆积面积图
ggplot(data, aes(x=time, y=value, fill=group)) +
geom_area()
顺序修改
#控制排序
#把分组那一列因子化,并给定排列顺序
data$group <- factor(data$group , levels=c("B", "A", "D", "E", "G", "F", "C") )
#重新画图
ggplot(data, aes(x=time, y=value, fill=group)) +
geom_area()
风格修改
#修改风格
library(viridis)
## 载入需要的程辑包:viridisLite
library(hrbrthemes)
ggplot(data, aes(x=time, y=value, fill=group)) +
geom_area(alpha=0.6 , size=.5, colour="white") +
scale_fill_viridis(discrete = T) +
theme_ipsum() +
ggtitle("堆积面积图")
变种:比例堆积面积图
#比例堆积面积图
#在比例堆积面积图中,每年的总和始终为等于100,每个组的值表示为百分比。
#计算比例
library(dplyr)
data <- data %>%
group_by(time, group) %>%
summarise(n = sum(value)) %>%
mutate(percentage = n / sum(n))
#绘图
ggplot(data, aes(x=time, y=percentage, fill=group)) +
geom_area(alpha=0.6 , size=1, colour="black")