【发布时间】:2012-11-30 11:37:38
【问题描述】:
在R中创建堆积条形图有多种解决方案,但是如何绘制堆积线图?
【问题讨论】:
-
许多用户似乎在搜索堆积条形图时发现了这个问题。看这里:statmethods.net/graphs/bar.html
在R中创建堆积条形图有多种解决方案,但是如何绘制堆积线图?
【问题讨论】:
可以使用ggplot2 包创建堆叠线图。
一些示例数据:
set.seed(11)
df <- data.frame(a = rlnorm(30), b = 1:10, c = rep(LETTERS[1:3], each = 10))
这种情节的函数是geom_area:
library(ggplot2)
ggplot(df, aes(x = b, y = a, fill = c)) + geom_area(position = 'stack')
【讨论】:
鉴于图表数据可作为数据框使用,列中有“线”,行中有 Y 值,并且 row.names 是 X 值,此脚本使用多边形函数创建堆叠折线图。
stackplot = function(data, ylim=NA, main=NA, colors=NA, xlab=NA, ylab=NA) {
# stacked line plot
if (is.na(ylim)) {
ylim=c(0, max(rowSums(data, na.rm=T)))
}
if (is.na(colors)) {
colors = c("green","red","lightgray","blue","orange","purple", "yellow")
}
xval = as.numeric(row.names(data))
summary = rep(0, nrow(data))
recent = summary
# Create empty plot
plot(c(-100), c(-100), xlim=c(min(xval, na.rm=T), max(xval, na.rm=T)), ylim=ylim, main=main, xlab=xlab, ylab=ylab)
# One polygon per column
cols = names(data)
for (c in 1:length(cols)) {
current = data[[cols[[c]]]]
summary = summary + current
polygon(
x=c(xval, rev(xval)),
y=c(summary, rev(recent)),
col=colors[[c]]
)
recent = summary
}
}
【讨论】:
... 添加到参数列表中,以便所有plot 函数参数都可以使用。特别是,xaxs="i" 将消除堆叠图和绘图边缘之间的白边。
只需在 geom_line(position = "stack") 中指定 position = "stack" 即可。例如:
dat <- data.frame(x = c(1:5,1:5),
y = c(9:5, 10,7,5,3,1),
type = rep(c("a", "b"), each = 5))
library(dplyr)
library(ggplot2)
dat %>%
ggplot(aes(fill = type,
x = x,
y = y,
color = type,
linetype = type)) +
geom_line(position = "stack", size = 2) + # specify it here
theme_bw()
导致堆积线图:
或者,您也可以将堆积线图与geom_area plot as shown here 结合起来:
dat %>%
ggplot(aes(fill = type,
x = x,
y = y,
color = type,
linetype = type)) +
geom_area(position="stack",
stat="identity",
alpha = 0.5) +
geom_line(position = "stack", size = 2) +
theme_bw()
【讨论】: