2012-07-13 12 views
5

Oto mały zbiór danych:łącząca wszystkie punkty (możliwe conbination) w wykres punktowy

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) 

Chcę połączyć wszystkie możliwe kombinacje pomiędzy linię z prostym (euklidesowej) oddali do produkcji niektórych wykres takiego (najlepiej w bazie grafiki lub ggplot2)

enter image description here

Odpowiedz

6

Oto roztwór zasady Opis:

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

Oto rozwiązanie ggplot2:

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

W ggplot można użyć geom_segment rysować linie łączące.

Najpierw należy skonstruować ramkę danych z współrzędnymi każdej linii łączącej. Użyj combn() znaleźć wszystkie kombinacje:

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

Następnie działki:

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

Powiązane problemy