2012-10-07 47 views
11

我想創建一個功能區圖(實際上它是一個分類變量的多個組的線圖),但以3D樣式顯示。這將是這個樣子:如何創建一個ribbon ribbon?

Ribbon plot example

因此,也許我們要繪製下面的示例數據爲帶狀圖:

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上實現嗎?我知道可能有更好的方法來顯示數據,但我目前的興趣是製作絲帶風格情節。

回答

16

希望下面的例子可以幫助你指明正確的方向:

# 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) 

ribbon_example

正如你可以看到,這裏的基本想法是很簡單。我們組織我們的值被繪製到矩陣中,複製矩陣中的列以使它們成對,然後使用persp()繪製值,確保在透明和不透明顏色之間交替。然而,還有一些棘手的細節仍有待解決,特別是關於如何處理邊界參數。我會把這些細節留給你。

希望這會有所幫助。