Apa cara yang baik untuk menggunakan R untuk membuat sebaran yang memisahkan data dengan perlakuan?

30

Saya sangat baru dengan R dan statistik secara umum, tetapi saya perlu membuat sebar yang saya pikir mungkin di luar kapasitas aslinya.

Saya memiliki beberapa vektor pengamatan dan saya ingin membuat sebar dengan mereka, dan masing-masing pasangan jatuh ke dalam satu dari tiga kategori. Saya ingin membuat sebar yang memisahkan setiap kategori, baik dengan warna atau simbol. Saya pikir ini akan lebih baik daripada menghasilkan tiga scatterplots yang berbeda.

Saya memiliki masalah lain dengan fakta bahwa di masing-masing kategori, ada satu kelompok besar di satu titik, tetapi kelompok itu lebih besar di satu kelompok daripada di dua lainnya.

Adakah yang tahu cara yang baik untuk melakukan ini? Paket yang harus saya instal dan pelajari cara menggunakan? Adakah yang melakukan hal serupa?

Terima kasih

crf
sumber

Jawaban:

53

cluster besar : jika mencetak berlebihan adalah masalah, Anda bisa menggunakan alpha yang lebih rendah, jadi satu titik redup, tetapi overprining membuat warna lebih intens. Atau Anda beralih ke histogram 2d atau perkiraan kepadatan.

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    massa jenis
    Anda mungkin ingin facet ini ...

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    hexbin
    Meskipun Anda dapat memproses plot ini juga tanpa sisi, urutan pembukaan Spesies memikat gambar terakhir.

  • Anda dapat menghindari ini jika Anda ingin tangan Anda sedikit kotor (= tautan ke penjelasan & kode) dan hitung warna campuran untuk segi enam: masukkan deskripsi gambar di sini

  • Hal lain yang bermanfaat adalah menggunakan (hex) nampan untuk daerah kepadatan tinggi, dan plot titik tunggal untuk bagian lain:

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

    masukkan deskripsi gambar di sini


Demi kelengkapan paket plot, izinkan saya juga menyebutkan lattice:

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

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Panjang, iris, grup = iris $ Spesies, pch = 20) </code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code> xyplot (Sepal.Width ~ Sepal.Length | Spesies, iris, grup = iris $ Spesies, pch = 20) </code>

Cbeleites mendukung Monica
sumber
Menyenangkan! Terima kasih banyak, nampan hex melakukan trik dengan sempurna!
crf
22

Ini adalah salah satu masalah klasik untuk set data 'Iris'. Ini adalah tautan ke seluruh rangkaian proyek plot berdasarkan kumpulan data dengan kode R, yang mungkin dapat Anda adaptasi dengan masalah Anda.

Berikut adalah pendekatan yang digunakan dengan basis R daripada paket add-on.

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

yang menghasilkan gambar ini:

masukkan deskripsi gambar di sini

Dari sana, tergantung pada plot Anda, Anda dapat mulai mengotak-atik dengan tingkat alfa / transparansi untuk memungkinkan penempatan berlebih, dll. Tapi saya akan membangun dari grafik yang sangat mendasar terlebih dahulu.

Meskipun ada banyak alasan untuk tetap menggunakan basis R, paket lain menyederhanakan plot. Memisahkan data dengan fitur yang membedakan adalah salah satu kekuatan dari paket ggplot2 dan kisi . ggplot2 membuat plot yang secara visual menarik. Kedua paket ditunjukkan dalam jawaban oleh @cbeleites.

Fomite
sumber
4
Agak membingungkan karena walaupun Anda merekomendasikan ggplot2, Anda tidak menggunakannya dalam contoh Anda? Woudl setara ggplot2 menjadi pustaka (ggplot2); qplot (Petal.Length, Petal.Width, color = Species, data = iris, main = "Data Iris Edgar Anderson"). Ini juga memiliki keuntungan secara otomatis menghasilkan legenda.
Peter Ellis
@PeterEllis Itu karena sementara saya bisa mengenali sesuatu yang cocok dengan ggplot2, saya bahkan cukup kompeten dengan grafis dasar.
Fomite
1
Trik hebat dengan unclass () dalam grafik dasar BTW
Peter Ellis
16

Atau dengan 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)

Yang menghasilkan

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Roman Luštrik
sumber