0

我有一个矩阵列表。列表中的每个矩阵的大小为 Nx2。N 可能因矩阵而异。我知道如何使用 plot() 为每个单独的矩阵生成散点图。我想知道是否有一种简单的方法可以将每个矩阵的散点图放入同一个图中,并自动为每个矩阵分配适当的颜色。

例如,以下代码将生成一个包含两个矩阵的列表。第一个矩阵是 20x2,第二个是 10x2。

test = list()
test[[1]] <- replicate(2, rnorm(10))
test[[2]] <- replicate(2, rnorm(20))

我可以使用 plot(test[[1]]) 或 plot(test[[2]]) 为每个单独的矩阵生成散点图。但我想做的是将两个散点图放在同一个图中,其中每个矩阵都有不同的颜色。由于我正在寻找一种可以推广到最多 10 个矩阵的方法,因此理想情况下,颜色分配应该是自动的。

4

2 回答 2

1

如果matrices是您的矩阵列表,您可以这样做:

data<-do.call(rbind,matrices)
colors<-c(mapply(rep,1:length(matrices),sapply(matrices,nrow)),recursive=T)  
plot(data,col=colors)

您也可以一次构建一个矩阵,但在这种情况下,您必须提前确定范围,这有点麻烦:

xrange<-range(sapply(matrices,function(x)x[,1]))
yrange<-range(sapply(matrices,function(x)x[,2]))
plot(0,xlim=xrange,ylim=yrange,type="n")
for(i in 1:length(matrices))
  points(matrices[[i]],col=i)
于 2013-10-02T22:57:47.690 回答
0

如果您不介意将矩阵转换为数据框,则可以尝试使用以下替代方法ggplot

library(ggplot2)

test2 <- lapply(seq_along(test), function(x){
  data.frame(test[[x]], grp = as.factor(x))
  })

df <- do.call(rbind, test2)

ggplot(data = df, aes(x = X1, y = X2, col = grp)) + geom_point()
于 2013-10-02T23:31:58.233 回答