2012-07-13 5 views
5

Hier verbindet, ist kleiner Datenmenge:alle Punkte (mögliche conbination) in Streudiagramm

myd <- data.frame(PC1 = rnorm(5, 5, 2), 
PC2 = rnorm (5, 5, 3), label = c("A", "B", "C", "D", "E")) 
plot(myd$PC1, myd$PC2) 
text(myd$PC1-0.1, myd$PC2, lab = myd$label) 

verbinde ich möchte alle möglichen Kombinationen zwischen Linie mit geraden (euklidische) Abstand, eine grafische Darstellung wie folgt aus (vorzugsweise in der Basis zu erzeugen,

Grafiken oder ggplot2)

enter image description here

Antwort

6

Hier ist die Basis Plotlösung:

plot(myd$PC1, myd$PC2) 
apply(combn(seq_len(nrow(myd)), 2), 2, 
     function(x) lines(myd[x, ]$PC1, myd[x, ]$PC2)) 

enter image description here

Hier ist die ggplot2 Lösung:

ps <- data.frame(t(apply(combn(seq_len(nrow(myd)), 2), 2, 
         function(x) c(myd[x, ]$PC1, myd[x, ]$PC2)))) 
qplot(myd$PC1, myd$PC2) + 
    geom_segment(data = ps, mapping = aes(x = X1, xend = X2, y = X3,yend = X4)) 

enter image description here

2

In ggplot können Sie geom_segment verwenden, um die Verbindungslinien zu ziehen.

Aber zuerst müssen Sie einen Datenrahmen mit den Koordinaten jeder Verbindungslinie konstruieren. Verwenden Sie combn() alle Kombinationen zu finden:

comb <- combn(nrow(myd), 2) 
connections <- data.frame(
    from = myd[comb[1, ], 1:2], 
    to = myd[comb[2, ], 1:3] 
) 
names(connections) <- c("x1", "y1", "x2", "y2", "label") 

Dann Grundstück:

library(ggplot2) 

ggplot(myd, aes(PC1, PC2)) + 
    geom_point(col="red", size=5) + 
    geom_segment(data=connections, aes(x=x1, y=y1, xend=x2, yend=y2), col="blue") 

enter image description here