Verileri işlemden ayıran bir dağılım grafiği oluşturmak için R'yi kullanmanın iyi bir yolu nedir?


30

Genel olarak R ve istatistikler konusunda çok yeniyim, ancak kendi yerel kapasitelerinin ötesinde olabileceğini düşündüğüm bir dağılım çizmem gerekiyor.

Birkaç gözlem vektörüne sahibim ve onlarla bir dağılım grafiği oluşturmak istiyorum ve her bir çift üç kategoriden birine giriyor. Her kategoriyi renkli veya sembolle ayıran bir saçılma grafiği yapmak istiyorum. Bunun üç farklı saçılma noktası oluşturmaktan daha iyi olacağını düşünüyorum.

Her kategoride bir noktada büyük kümeler olduğu gerçeği ile ilgili başka bir sorunum var ancak kümeler bir grupta diğer iki gruba göre daha büyük.

Bunu yapmanın iyi bir yolunu bilen var mı? Paketleri kurmalı ve kullanmayı öğrenmeliyim? Benzer bir şey yapan var mı?

Teşekkürler

Yanıtlar:


53

büyük kümeler : üst baskı bir sorunsa, daha düşük bir alfa kullanabilirsiniz, bu nedenle tek noktalar soluktur, ancak üst baskı daha yoğun renkler oluşturur. Veya 2d histogramlara veya yoğunluk tahminlerine geçersiniz.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    yoğunluk
    Muhtemelen bununla yüzleşmek istersiniz ...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    hexbin
    Bu arsa fasetsiz olarak da üretilebilse de, Türlerin baskı sırası son resmi yansıtır.

  • Ellerinizi biraz kirletmek istiyorsanız (= açıklama ve kod bağlantısı) ve altıgenler için karışık renkler hesaplamak istiyorsanız, bunu önleyebilirsiniz : görüntü tanımını buraya girin

  • Yararlı başka bir şey, yüksek yoğunluklu alanlar için (altıgen) kutuları kullanmak ve diğer parçalar için tekli noktalar çizmektir:

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

    görüntü tanımını buraya girin


Çizim paketlerinin eksiksiz olması adına şunu da belirteyim lattice:

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Tür, iris, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length, iris, groups = iris $ Tür, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Tür, iris, gruplar = iris $ Tür, pch = 20) </code>


Güzel! Çok teşekkür ederim, altıgen kutular hile mükemmel yaptı!
crf

22

Bu, 'Iris' veri seti için klasik sorunlardan biridir. Bu bir link sizin sorununuza uyarlayabileceğiniz R kodlu veri setine dayanan bir dizi komplo projesi .

İşte bir eklenti paketinden ziyade base R ile birlikte kullanılan bir yaklaşım.

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

bu rakamı üreten:

görüntü tanımını buraya girin

Oradan, arsaya bağlı olarak, fazla çizime izin vermek için alfa / şeffaflık seviyeleriyle uğraşmaya başlayabilirsiniz, ancak önce çok temel bir grafikten oluşturucam.

Baz R'ye yapışmanın birçok nedeni olsa da, diğer paketler komplo oluşturmayı kolaylaştırır. Verileri ayırt edici bir özellik ile ayırmak, ggplot2 ve kafes paketlerinin güçlü yönlerinden biridir . ggplot2 özellikle görsel olarak çekici grafikler yaratır. Her iki paket de cevabında @cbeleites tarafından gösterilmiştir.


4
Biraz kafa karıştırıcı çünkü ggplot2'yi tavsiye etseniz de bunu örneğinizde kullanmıyor musunuz? Bir ggplot2 eşdeğeri kütüphane olabilir (ggplot2); qplot (Petal.Length, Petal.Width, color = Tür, veri = iris, ana = "Edgar Anderson'ın İris Verileri"). Bu aynı zamanda otomatik olarak bir efsane üretme avantajına sahiptir.
Peter Ellis,

@PeterEllis Bunun nedeni, ggplot2'ye kendisini ödünç veren bir şeyi tanıyabildiğim halde, sadece temel grafiklerle yetkim bile yetkin.
Fomite

1
Temel grafiklerde unclass () ile büyük hile BTW
Peter Ellis,

16

Veya ggplot2 ile:

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)

Hangi üretir

görüntü tanımını buraya girin

görüntü tanımını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.