我有一些数据是一组随时间变化的百分比。我想将这些数据显示为带有连接系列的线条的堆积条形图:
m <-barplot(b)
lines(c(m[1]+0.5,m[2]-0.5), c(0,0))
lines(c(m[1]+0.5,m[2]-0.5), c( b[1,1], b[1,2]))
lines(c(m[1]+0.5,m[2]-0.5), c( b[1,1]+b[2,1], b[1,2]+b[2,2]))
lines(c(m[1]+0.5,m[2]-0.5), c( b[1,1]+b[2,1]+b[3,1], b[1,2]+b[2,2]+b[3,2]))
lines(c(m[1]+0.5,m[2]-0.5), c( b[1,1]+b[2,1]+b[3,1]+b[4,1], b[1,2]+b[2,2]+b[3,2]+b[4,2]))
这样的情节让我得到了这个情节,但当我想要每个时间点更多的列或更多部分时,这当然会严重缩放。我已经尝试在for循环中添加行,但我无法完全正确。有人知道如何以更灵活的方式做到这一点,还是有一个实现这个情节的包?
答案 0 :(得分:1)
免责声明:这是从问题中提取的。
以下是如何执行此操作的示例:
dat <- matrix(c(3,4,5,9,2,1,5,6,5,5,6,2), nrow=3)
color=c("darkgreen", "darkgrey", "gold", "darkblue")
barplot_series <- function(dat, color) {
b <- barplot(dat, col=color, las=2)
#columns i are the samples
for (i in 1:dim(dat)[2] - 1 ) {
if (i < 1) {next}
print (c("column", i))
#rows j: these are the individual clones
for (j in 1: dim(dat)[1] ) { # or dim(dat)[1]-1
if (j < 1) {next}
print (c("row", j))
if (j < 2) {
lines(c(b[i]+0.5, b[i+1]-0.5), c(dat[j,i], dat[j,i+1]))
}
if (j > 1) {
lines(c(b[i]+0.5, b[i+1]-0.5), c(colSums(dat[1:j,])[i], colSums(dat[1:j,])[i+1]))
}
}
}
}
barplot_series(dat, color)
可能有更好的方法来实现相同的目标,但是此功能会生成我正在寻找的连接系列的堆积条形图,并使用包含数据的矩阵进行缩放。
答案 1 :(得分:0)
如上所述:这是我为初步问题制定的答案。
dat <- matrix(c(3,4,5,9,2,1,5,6,5,5,6,2), nrow=3)
color=c("darkgreen", "darkgrey", "gold", "darkblue")
barplot_series <- function(dat, color) {
b <- barplot(dat, col=color, las=2)
#columns i are the samples
for (i in 1:dim(dat)[2] - 1 ) {
if (i < 1) {next}
print (c("column", i))
#rows j: these are the individual clones
for (j in 1: dim(dat)[1] ) { # or dim(dat)[1]-1
if (j < 1) {next}
print (c("row", j))
if (j < 2) {
lines(c(b[i]+0.5, b[i+1]-0.5), c(dat[j,i], dat[j,i+1]))
}
if (j > 1) {
lines(c(b[i]+0.5, b[i+1]-0.5), c(colSums(dat[1:j,])[i], colSums(dat[1:j,])[i+1]))
}
}
}
}
barplot_series(dat, color)