我有一个矩阵列表。列表中的每个矩阵的大小为Nx2。 N可以在矩阵与矩阵之间不同。我知道如何使用plot()为每个单独的矩阵生成散点图。我想知道是否有一种简单的方法可以将每个矩阵的散点图放到同一个图中,并自动为每个矩阵分配适当的颜色。
例如,以下代码将生成包含两个矩阵的列表。第一个矩阵是20x2,第二个矩阵是10x2。
test = list()
test[[1]] <- replicate(2, rnorm(10))
test[[2]] <- replicate(2, rnorm(20))
我可以使用绘图(测试[[1]])或绘图(测试[[2]])来生成每个矩阵的散点图。但我想做的是将两个散点图放在同一个图中,每个矩阵都有不同的颜色。由于我正在寻找一种可以推广到多达10个矩阵的方法,理想情况下,颜色分配应该是自动的。
答案 0 :(得分: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)
答案 1 :(得分: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()