2013-10-02 212 views
0

我有一個矩陣列表。列表中的每個矩陣的大小爲N×2。 N可能不同於矩陣。我知道如何使用plot()爲每個單獨的矩陣生成散點圖。我想知道是否有一種簡單的方法可以將每個矩陣的散點圖繪製到同一個圖中,並自動爲每個矩陣分配適當的顏色。R:矩陣列表中的散點圖

例如,下面的代碼會生成一個包含兩個矩陣的列表。第一個矩陣是20x2,第二個矩陣是10x2。

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

我可以使用圖(試驗[[1]])或圖(試驗[[2]])生成用於每個單獨的矩陣散點圖。但我想要做的是將兩個散點圖放入同一個圖中,其中每個矩陣具有不同的顏色。由於我正在尋找一種可以推廣到多達10個矩陣的方法,理想情況下,顏色分配應該是自動的。

+4

您需要確定x和y數據的範圍,定義「適當」,並說出您選擇哪種繪圖範例。 –

+1

請提供[最小,可重現的數據集](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610#5963610)以及您嘗試過的代碼。 – Henrik

+0

你打算如何在一個散點圖上有10種不同的顏色可以很容易區分?也許你應該考慮使用多個圖或其他顯示數據的方法。 – thelatemail

回答

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) 
+0

當我在原始帖子的「測試」變量上嘗試這三行代碼時,即用「測試」替換「矩陣」。我得到以下錯誤:'警告消息: 1:在plot.xy(xy,type,...)中: 提供的顏色既不是數字也不是字符'。但是,'顏色= 1:長度(測試)'似乎工作。 – mr49

+0

你確定你用「test」替換了每個「矩陣」嗎?代碼在我的機器上運行良好。 '顏色= 1:長度(測試)'不是你想要的 - 這將使第一個顏色爲1,下一個爲2,依此類推。 – mrip

+0

啊,簡單地使用'colors = 1:length(test)'實際上並不奏效。 – mr49

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()