我想要创建一个功能区图(实际上它是多个分类变量组的线图),但以3d样式显示。这看起来像这样:
因此,我们可能希望将以下样本数据绘制为带状图:
set.seed(10)
fun <- function(i) data.frame(person=rep(LETTERS[i], 26),
letter=letters, count=sample(0:100, 26, T))
dat <- do.call(rbind, lapply(1:10, function(i) fun(i)))
library(ggplot2) #a traditional 2-d line plot of the data
ggplot(data=dat, aes(x=letter, y=count, group=person, color=person)) +
geom_line()
如何在R中实现这一目标?我知道可能有更好的方式来显示数据,但我目前的兴趣是制作带状图。
答案 0 :(得分:18)
希望以下示例可以帮助您指明正确的方向:
# data
mat <- matrix(dpois(rep(1:20, 10), lambda=rep(10:1, each=20)), ncol=10)
# 2d line plot
matplot(mat, type="l", col="black", lty=1)
# 3d ribbon plots
par(mar = c(0, 1, 0, 1))
par(mfrow=c(1,2))
persp(z=mat[,rep(seq(ncol(mat)), each=2)], r=5, theta=320, phi=35, shade=0.5,
border=NULL, col=rep(c("#808080FE","#00000000"), each=nrow(mat)-1))
persp(z=mat[,rep(seq(ncol(mat)), each=2)], r=5, theta=320, phi=35, shade=0.5,
border=NA, col=rep(c("#808080FE","#00000000"), each=nrow(mat)-1))
par(mfrow=c(1,1))
par(mar = c(5,4,4,2)+.1)
正如您所看到的,这里的基本想法非常简单。我们将值组织成矩阵,复制矩阵中的列以使它们成对,然后使用persp()
绘制值,确保在透明和不透明颜色之间交替。但是,有一些棘手的细节仍有待解决,特别是关于如何处理border参数。我会把这些细节留给你。
希望这有帮助。