簡體   English   中英

R:矩陣列表中的散點圖

[英]R: Scatterplot from a list of matrices

我有一個矩陣列表。 列表中的每個矩陣的大小為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個矩陣的方法,因此理想情況下,顏色分配應該是自動的。

如果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)

如果您不介意將矩陣轉換為數據幀,則可以使用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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM