2013-05-08 58 views
0

我需要一張不同密度線的圖,每張圖都有另一種顏色。這是一個示例代碼(但要小得多),使用內置的data.fame USArrests。我希望可以使用它?使用colwise的密度圖 - 每行有不同的顏色?

colors <- heat.colors(3) 
plot(density(USArrests[,2], bw=1, kernel="epanechnikov", na.rm=TRUE),col=colors[1])  
lines1E <- function(x)lines(density(x,bw=1,kernel="epanechnikov",na.rm=TRUE))  
lines1EUSA <- colwise(lines1E)(USArrests[,3:4])` 

目前代碼只生成colwise()只有一種顏色。我怎樣才能得到每一行另一種顏色?或者有更好的方法來繪製不同顏色的幾條密度線?

回答

0

我不太明白你的榜樣,所以我創建了自己的示例數據集中。首先,創建一個矩陣有三列:

m = matrix(rnorm(60), ncol=3) 

然後繪製第一列的密度:

plot(density(m[,1]), col=2) 

使用您lines1E功能爲模板:

lines1E = function(x) {lines(density(x))} 

我們可以添加繪製多條曲線:

colwise(lines1E)(as.data.frame(m[ ,2:3])) 

就個人而言,我只想用:

##Added in NA for illustration 
m = matrix(rnorm(60), ncol=3) 
m[1,] = NA 
plot(density(m[,1], na.rm=T)) 
sapply(2:ncol(m), function(i) lines(density(m[,i], na.rm=T), col=i)) 

獲得:

enter image description here

+0

感謝你的努力。隨着你的第一個例子,我還是剛2種顏色,而不是3我原來data.frame大得多。 sapply沒有使用我的data.frame,我認爲是因爲NA,這就是爲什麼我用colwise()代替。但我會再試一次 – May6 2013-05-08 11:04:53

+0

'NA不影響'sapply'。但是,您需要在密度函數中添加'na.rm = TRUE'。關於顏色,這有點棘手,因爲它需要你的'lines1E'函數來知道正在使用哪一列。這是可能的,但我認爲這不是一個好主意。 – csgillespie 2013-05-08 11:12:08

+0

這工作 - 非常感謝你!我想我沒有正確使用sapply功能。 – May6 2013-05-08 11:39:49