Jaki jest dobry sposób użycia R do utworzenia wykresu rozrzutu, który oddziela dane według leczenia?

30

Jestem bardzo nowy z R i statystykami w ogóle, ale muszę stworzyć wykres rozproszenia, który moim zdaniem może wykraczać poza jego natywne możliwości.

Mam kilka wektorów obserwacji i chcę zrobić z nimi wykres rozrzutu, a każda para należy do jednej z trzech kategorii. Chciałbym utworzyć wykres rozrzutu, który oddziela każdą kategorię, albo kolorem, albo symbolem. Myślę, że byłoby to lepsze niż generowanie trzech różnych wykresów rozrzutu.

Mam inny problem z tym, że w każdej z kategorii są duże klastry w jednym punkcie, ale klastry są większe w jednej grupie niż w dwóch pozostałych.

Czy ktoś wie, jak to zrobić? Pakiety, które powinienem zainstalować i nauczyć się korzystać? Ktoś zrobił coś podobnego?

Dzięki

crf
źródło

Odpowiedzi:

53

duże skupiska : jeśli problem stanowi nadruk, możesz użyć niższej wartości alfa, więc pojedyncze punkty są przyciemnione, ale nadmiar powoduje bardziej intensywny kolor. Lub przełączasz na histogramy 2d lub szacunki gęstości.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    gęstość
    Prawdopodobnie zechcesz to zrobić ...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    hexbin
    Chociaż możesz fabułować tę fabułę również bez faset, porządek książęcy gatunku wpływa na ostateczny obraz.

  • Możesz tego uniknąć, jeśli chcesz ubrudzić sobie ręce (= link do wyjaśnienia i kodu) i obliczyć mieszane kolory dla sześciokątów: wprowadź opis zdjęcia tutaj

  • Kolejną przydatną rzeczą jest użycie (heksadecymalnych) pojemników dla obszarów o wysokiej gęstości i wykreślenie pojedynczych punktów dla innych części:

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
          geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")

    wprowadź opis zdjęcia tutaj


Ze względu na kompletność wydrukowanych paczek, wspomnę również lattice:

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Gatunki, tęczówka, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length, tęczówka, grupy = tęczówka $ Gatunek, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Gatunek, tęczówka, grupy = tęczówka $ Gatunek, pch = 20) </code>

cbeleites obsługuje Monikę
źródło
Śliczny! Dziękuję bardzo, pojemniki sześciokątne zrobiły wszystko perfekcyjnie!
crf
22

Jest to jeden z klasycznych problemów dla zestawu danych „Iris”. Jest to łącze do całego zestawu projektów kreślenia opartych na tym zestawie danych z kodem R, który możesz dostosować do swojego problemu.

Oto podejście, które wykorzystuje bazowy R zamiast pakietu dodatkowego.

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

co daje tę liczbę:

wprowadź opis zdjęcia tutaj

Stamtąd, w zależności od fabuły, możesz zacząć bawić się poziomami alfa / przezroczystości, aby umożliwić nadpisywanie itp., Ale najpierw zbudowałbym z bardzo podstawowego wykresu.

Chociaż istnieje wiele powodów, aby trzymać się podstawy R, inne pakiety upraszczają drukowanie. Oddzielanie danych za pomocą funkcji wyróżniającej jest jedną z mocnych stron ggplot2 i pakietów kratowych . ggplot2 tworzy szczególnie atrakcyjne wizualnie wykresy. Oba pakiety są przedstawione w odpowiedzi przez @cbeleites.

Fomite
źródło
4
Trochę mylące, ponieważ chociaż polecasz ggplot2, nie używasz go w swoim przykładzie? Równoważnik ggplot2 będzie biblioteką (ggplot2); qplot (Petal.Length, Petal.Width, color = Species, data = iris, main = "Edgar Anderson's Iris Data"). Ma to tę zaletę, że automatycznie tworzy legendę.
Peter Ellis,
@PeterEllis To dlatego, że chociaż potrafię rozpoznać coś, co dobrze nadaje się do ggplot2, jestem tylko mimochodem z podstawową grafiką.
Fomite,
1
Świetna sztuczka z unclass () w podstawowej grafice BTW
Peter Ellis
16

Lub z ggplot2:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

Który produkuje

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Roman Luštrik
źródło