Boxplot untuk beberapa distribusi?

9

Saya perlu menggambar 20 distribusi dalam satu grafik dalam R, dan tidak terlihat bagus (berantakan) dengan boxplot biasa (20 kotak) bahkan dengan boxwex = 0,3. Bisakah Anda memberi tahu saya bagaimana saya bisa memplot semacam boxplot di R untuk 20 distribusi, dengan titik-titik untuk median dan hanya garis daripada kotak, seperti yang di bawah ini. Tolong juga sarankan saya jika ada metode R yang menghasilkan plot box yang bagus, khususnya jika Anda ingin menunjukkan beberapa distribusi dalam satu grafik.

 -----0----
samarasa
sumber

Jawaban:

12

(Ini benar-benar komentar, tetapi karena membutuhkan ilustrasi, maka harus diposting sebagai balasan.)

Ed Tufte mendesain ulang boxplot dalam Tampilan Visual Informasi Kuantitatif (hlm. 125, Edisi Pertama 1983) tepatnya untuk memungkinkan "analisis data eksplorasi yang informal, di mana waktu pekerja peneliti harus dikhususkan untuk hal-hal selain menggambar garis." Saya telah (dengan cara yang sangat alami) memperluas desain ulang untuk mengakomodasi outlier gambar dalam contoh ini menunjukkan 70 plot kotak paralel:

Plot box Tufte

Saya dapat memikirkan beberapa cara untuk meningkatkan ini lebih lanjut, tetapi merupakan ciri khas dari apa yang mungkin dihasilkan seseorang dalam panasnya mengeksplorasi dataset yang kompleks: kami puas membuat visualisasi yang memungkinkan kami melihat data; presentasi yang baik bisa datang nanti.

Bandingkan ini dengan rendisi konvensional dari data yang sama:

Plot box konvensional

Tufte menghadirkan beberapa desain ulang lain berdasarkan prinsipnya "memaksimalkan rasio tinta data." Nilai mereka terletak pada menggambarkan bagaimana prinsip ini dapat membantu kami merancang grafik eksplorasi yang efektif. Seperti yang Anda lihat, mekanisme merencanakannya sama dengan menemukan platform grafis di mana Anda dapat menggambar penanda titik dan garis.

whuber
sumber
Bisakah Anda membantu menggambar grafik teratas dalam R?
samarasa
1
@kkp Ini konsep kasar . Respons yang bagus (+1).
chl
Dan berikut adalah kemungkinan lebih lanjut dalam R - ditemukan pada SO: Fungsi tersedia untuk plot box Tufte di R? .
chl
@chl Terima kasih atas tautannya. Sebagai catatan, ini termasuk kode R yang berfungsi untuk memproduksi plot box yang didesain ulang ini. Yang menarik, pertanyaan itu diposting hanya tiga hari setelah pertanyaan ini ...
whuber
1
@memiliki pengamatan yang menarik. Salah satu potensi penggunaan boxplot tersebut adalah varian dari "plot skematik pengembara" Tukey di mana sebaran plot (besar) diiris di sepanjang koordinat x dan nilai-y diringkas oleh boxplot di setiap nampan. Prosedur seperti itu dapat dengan mudah menghasilkan 70 atau lebih boxplot berdampingan. Aplikasi mencakup hampir semua data multidimensi: misalnya, koordinat x mungkin mewakili kedalaman tanah yang diambil sampel setiap sentimeter dan koordinat y mungkin mewakili data yang diperoleh di beberapa lokasi.
whuber
10

Beanplots

Mungkin plot paling keren yang pernah ada, ini pada dasarnya merupakan implementasi kecil dari plot biola. Plot biola memiliki keuntungan besar dibandingkan boxplot: mereka dapat menunjukkan lebih banyak detail untuk distribusi yang tidak normal (misalnya mereka dapat menunjukkan distribusi bi-modal dengan sangat baik). Karena biasanya didasarkan pada pemulusan Gaussian (atau serupa), mereka tidak akan bekerja dengan sangat baik untuk distribusi dengan titik akhir yang tinggi (seperti distribusi eksponensial), tetapi kemudian, tidak juga boxplots.

Beanplots dapat dicapai dengan sangat mudah di R - cukup instal paket beanplot :

library(beanplot)

# Sampling code from Greg Snow's answer:
my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

beanplot(my.dat)

Beanplot!

The beanplotfungsi memiliki banyak pilihan , sehingga Anda dapat menyesuaikannya dengan keinginan hati Anda. Ada juga cara untuk melakukan beanplots di ggplot2 (perlu versi terbaru):

library(ggplot2)

my.dat <- lapply(1:20, function(x) rnorm(x+10, sample(10, 1), sample(3,1)))
my.df <- melt(my.dat)
ggplot(my.df, aes(x=L1, y=value, group=L1)) + geom_violin(trim=FALSE) +
  geom_segment(aes(x=L1-0.1, xend=L1+0.1, y=value, yend=value), colour='white')

Beanplot GGplot2

tidak ada apa-apa101
sumber
3

Berikut adalah beberapa contoh kode R untuk beberapa cara untuk melakukannya, Anda mungkin ingin memperluas ini (termasuk label dll.) Dan mungkin mengubahnya menjadi fungsi:

my.dat <- lapply( 1:20, function(x) rnorm(x+10, sample( 10, 1), sample(3,1) ) )

tmp <- boxplot(my.dat, plot=FALSE, range=0)

# box and median only
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[2,], seq_along(my.dat), tmp$stats[4,] )
points( tmp$stats[3,], seq_along(my.dat) )

# wiskers and implied box
plot( range(tmp$stats), c(1,length(my.dat)), xlab='', ylab='', type='n' )
segments( tmp$stats[1,], seq_along(my.dat), tmp$stats[2,] )
segments( tmp$stats[4,], seq_along(my.dat), tmp$stats[5,] )
points( tmp$stats[3,], seq_along(my.dat) )

masukkan deskripsi gambar di sini

Greg Snow
sumber