2013-05-08 51 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