2012-11-19 12 views
6

Mam ramki danych, który wygląda mniej więcej tak:Tworzenie wykres punktowy dla wielu wierszy w R

 Samp1 Samp2 Samp3  Samp4 Samp5 
Gene1 84.1  45.2  34.3  54.6  76.2 
Gene2 94.2  12.4  68.0  75.3  24.8 
Gene3 29.5  10.5  43.2  39.5  45.5 
... 

Próbuję utworzyć wykres punktowy, gdzie osi x są próbki (Samp1-5), a oś y to rzędy (Gene1-3 itd.), ale chcę, aby dane każdego wiersza były drukowane jako inny kolor na tym samym wykresie.

Wszelkie uwagi na temat tego, jak to zrobić w R? Jestem bardziej niż chętny do użycia ggplot2, kratownicy, samochodu lub jakiejkolwiek innej paczki w R.

+1

FYI: Gdy dostaniesz odpowiedź, która rozwiązuje twój problem, jest bardzo pomocna dla witryny jako całości, jeśli klikniesz mały znacznik obok odpowiedzi, która rozwiązała Twój problem. W ten sposób przyszli czytelnicy będą pewni, że ta odpowiedź rozwiązała Twój problem. (Ale oczywiście powinieneś to zrobić tylko wtedy, gdy odpowiedź naprawdę rozwiązała twój problem.) – joran

+0

OK Dzięki @joran. Czy to zrobię - chociaż muszę jeszcze rozwiązać ten problem. – Sheila

Odpowiedz

2

Tutaj jest roztworem ggplot2:

Dane:

dat <- read.table(text="Samp1 Samp2 Samp3  Samp4 Samp5 
    Gene1 84.1  45.2  34.3  54.6  76.2 
    Gene2 94.2  12.4  68.0  75.3  24.8 
    Gene3 29.5  10.5  43.2  39.5  45.5", header = TRUE) 

działki:

library(ggplot2) 
ggplot(stack(dat), aes(x = ind, y = values, colour = rownames(dat))) + 
    geom_point() 

enter image description here

+0

To działało świetnie! Dzięki za pomoc! – Sheila

+1

Witam, dlaczego otrzymuję ten błąd, gdy próbuję odtworzyć Twój przykład? Błąd: estetyka musi być długością pierwszej lub tą samą długością, co problemy z danymi: rownames (dat) –

1

Jeśli chcesz to zrobić w sieci lub ggplot2, prawdopodobnie będziesz musiał zmienić swoje dane na długi format, zobacz funkcję reshape lub pakiet reshape2.

Dla podstawowej grafiki funkcja matplot prawdopodobnie zrobi to, co chcesz, możesz potrzebować pominąć oś X i użyć funkcji axis, aby dodać własną, jeśli nie chcesz, aby liczby od 1 do 5 były ośami znaki podziałki.

0

umieścić dane do matrycy:

foo <- as.matrix(structure(list(Samp1 = c(84.1, 94.2, 29.5), 
    Samp2 = c(45.2, 12.4, 10.5),Samp3 = c(34.3, 68, 43.2), 
    Samp4 = c(54.6, 75.3, 39.5),Samp5 = c(76.2, 24.8, 45.5)), 
    .Names = c("Samp1", "Samp2","Samp3", "Samp4", "Samp5"), 
    class = "data.frame", row.names = c("Gene1","Gene2", "Gene3"))) 

A działki:

plot(seq(1,ncol(foo)),foo[1,],xlab="",ylab="",xaxt="n", 
    pch=21,bg=1,ylim=c(min(foo),max(foo))) 
axis(side=1,at=seq(1,ncol(foo)),labels=colnames(foo)) 
for (ii in 2:nrow(foo)) points(seq(1,ncol(foo)),foo[ii,],pch=21,col=ii,bg=ii) 

Zauważ, że ja na rowerze przez kolorów przez ich numerów (col=ii,bg=ii). Zobacz ?palette.

Możesz również chcieć spojrzeć na ?legend.

scatterplot