Visualisasi data yang paling jarang digunakan [ditutup]

178

Histogram dan sebar adalah metode yang bagus untuk memvisualisasikan data dan hubungan antar variabel, tetapi baru-baru ini saya bertanya-tanya tentang teknik visualisasi apa yang saya lewatkan. Menurut Anda, apa jenis plot yang paling jarang digunakan?

Jawaban harus:

  1. Tidak terlalu umum digunakan dalam praktik.
  2. Dapat dimengerti tanpa banyak diskusi latar belakang.
  3. Dapat diterapkan dalam banyak situasi umum.
  4. Masukkan kode yang dapat direproduksi untuk membuat contoh (lebih disukai dalam R). Gambar yang ditautkan akan menyenangkan.
Ian Fellows
sumber
13
Saya pikir ini adalah diskusi yang sangat berguna, dan saya sedih itu ditutup.
Alex Brown
2
@AlexBrown: lalu mengapa tidak memilih untuk membuka kembali? Saya dapat melihat mengapa kata-kata dari pertanyaan ini mungkin terasa "tidak konstruktif", tetapi pertanyaan ini menghasilkan beberapa jawaban paling bijaksana dan berwawasan pada topik ini di mana saja di web. Saya ingin melihat jawaban ini diperbarui dan diperluas.
maks
2
Ini mungkin harus dipindahkan ke stats.stackoverflow.com. Ini jauh lebih cocok untuk situs itu.
naught101
4
Sayang sekali tidak ada yang menyebutkan plot QQ di sini sebelum ini ditutup. Mereka sangat berguna!
nucky101
Ini harus dibuka kembali.
Peter Flom

Jawaban:

89

Saya sangat setuju dengan poster-poster lainnya: Buku-buku Tufte sangat fantastis dan layak dibaca.

Pertama, saya akan mengarahkan Anda ke tutorial yang sangat bagus tentang ggplot2 dan ggobi dari "Melihat Data" awal tahun ini. Di luar itu saya hanya akan menyoroti satu visualisasi dari R, dan dua paket grafik (yang tidak banyak digunakan sebagai grafik dasar, kisi, atau ggplot):

Peta Panas

Saya sangat suka visualisasi yang dapat menangani data multivarian, terutama data deret waktu. Peta panas dapat bermanfaat untuk ini. Yang benar-benar rapi ditampilkan oleh David Smith di blog Revolusi . Berikut adalah kode ggplot milik Hadley:

stock <- "MSFT"
start.date <- "2006-01-12"
end.date <- Sys.Date()
quote <- paste("http://ichart.finance.yahoo.com/table.csv?s=",
                stock, "&a=", substr(start.date,6,7),
                "&b=", substr(start.date, 9, 10),
                "&c=", substr(start.date, 1,4), 
                "&d=", substr(end.date,6,7),
                "&e=", substr(end.date, 9, 10),
                "&f=", substr(end.date, 1,4),
                "&g=d&ignore=.csv", sep="")    
stock.data <- read.csv(quote, as.is=TRUE)
stock.data <- transform(stock.data,
  week = as.POSIXlt(Date)$yday %/% 7 + 1,
  wday = as.POSIXlt(Date)$wday,
  year = as.POSIXlt(Date)$year + 1900)

library(ggplot2)
ggplot(stock.data, aes(week, wday, fill = Adj.Close)) + 
  geom_tile(colour = "white") + 
  scale_fill_gradientn(colours = c("#D61818","#FFAE63","#FFFFBD","#B5E384")) + 
  facet_wrap(~ year, ncol = 1)

Yang akhirnya terlihat seperti ini:

teks alternatif

RGL: Grafik 3D Interaktif

Paket lain yang layak untuk dipelajari adalah RGL , yang dengan mudah menyediakan kemampuan untuk membuat grafik 3D interaktif. Ada banyak contoh online untuk ini (termasuk dalam dokumentasi rgl).

R-Wiki memiliki contoh yang bagus tentang cara memplot plot pencar 3D menggunakan rgl.

GGobi

Paket lain yang perlu diketahui adalah rggobi . Ada buku Springer tentang masalah ini , dan banyak dokumentasi / contoh online yang bagus, termasuk di kursus "Melihat Data" .

Shane
sumber
bagus. Terima kasih telah memasukkan kode / gambar.
Ian Fellows
apa yang ditunjukkan oleh posisi vertikal 'Z' atau tikungan di setiap garis vertikal hitam solid?
doug
Itu adalah batas bulan (bulan tidak berakhir pada hari yang sama).
Shane
3
Itu indah. Bagaimana Anda mendapatkan batas bulan terjadi?
Alex Brown
58

Saya sangat suka dotplots dan menemukan ketika saya merekomendasikan mereka kepada orang lain untuk masalah data yang sesuai mereka selalu terkejut dan senang. Mereka sepertinya tidak banyak digunakan, dan saya tidak tahu mengapa.

Berikut ini contoh dari Quick-R: dotplot pada data mobil

Saya percaya Cleveland yang paling bertanggung jawab untuk pengembangan dan penyebaran ini, dan contoh dalam bukunya (di mana data yang salah mudah dideteksi dengan dotplot) adalah argumen yang kuat untuk penggunaannya. Perhatikan bahwa contoh di atas hanya menempatkan satu titik per baris, sedangkan kekuatan sebenarnya datang dengan Anda memiliki beberapa titik di setiap baris, dengan legenda yang menjelaskan yang mana. Misalnya, Anda dapat menggunakan simbol atau warna yang berbeda untuk tiga titik waktu yang berbeda, dan karenanya dapat dengan mudah memahami pola waktu dalam berbagai kategori.

Dalam contoh berikut (dilakukan dalam Excel dari semua hal!), Anda dapat dengan jelas melihat kategori mana yang menderita dari pertukaran label.

Dotplot dengan 2 grup

Ari B. Friedman
sumber
1
Apa bedanya dotplot dengan sebaran dengan switched axis yang salah satunya kategorikal?
DrSAR
4
@DrSAR Bagaimana histogram berbeda dari barchart, atau plot kerapatan berbeda dari plot garis? Anda dapat mendeskripsikan banyak tipe bagan standar dalam hal geometri yang lebih mendasar (lihat Semiologie Graphique ), tetapi itu tidak membuat wawasan untuk memplot sesuatu dengan cara tertentu menjadi kurang unik. Dalam hal ini, Anda memplot dua informasi kategoris (satu secara vertikal, satu dengan bentuk karakter plot) terhadap satu data kontinu. Sementara di sebagian besar paket perangkat lunak Anda akan meretas sebar untuk membuatnya, itu paling tegas bukan sebar.
Ari B. Friedman
2
@ gsk3 Tidak bermaksud terdengar aneh. Bahkan, saya sekarang (setelah membaca lebih banyak tentang tata bahasa grafik dan karya serupa) menyadari bahwa perbedaan tingkat yang lebih tinggi ini bisa sangat penting untuk presentasi. Terima kasih telah menunjukkan ini.
DrSAR
@DrSAR Dan saya tidak bermaksud terdengar defensif. Sifat komentar SO kurasa ;-)
Ari B. Friedman
56

Plot menggunakan koordinat kutub tentu kurang dimanfaatkan - beberapa akan mengatakan dengan alasan yang bagus. Saya pikir situasi yang membenarkan penggunaannya tidak umum; Saya juga berpikir bahwa ketika situasi itu muncul, plot polar dapat mengungkapkan pola dalam data yang tidak bisa plot linear.

Saya pikir itu karena kadang-kadang data Anda secara inheren polar daripada linear - misalnya, itu bersifat siklis (koordinat x mewakili waktu selama 24 jam sehari selama beberapa hari), atau data sebelumnya dipetakan ke ruang fitur kutub.

Ini sebuah contoh. Plot ini menunjukkan volume lalu lintas rata-rata Situs Web menurut jam. Perhatikan kedua paku pada jam 10 malam dan jam 1 siang. Untuk insinyur jaringan Situs, itu penting; itu juga penting bahwa mereka terjadi berdekatan satu sama lain (hanya dua jam terpisah). Tetapi jika Anda memplot data yang sama pada sistem koordinat tradisional, pola ini akan sepenuhnya disembunyikan - diplotkan secara linier, kedua paku ini akan terpisah 20 jam, walaupun keduanya hanya terpisah dua jam pada hari-hari berturut-turut. Bagan kutub di atas menunjukkan ini dengan cara yang pelit dan intuitif (legenda tidak diperlukan).

Bagan kutub menampilkan lalu lintas situs, dengan puncak pada jam 1 dan 22

Ada dua cara (yang saya tahu) untuk membuat plot seperti ini menggunakan R (saya membuat plot di atas w / R). Salah satunya adalah kode fungsi Anda sendiri baik dalam sistem grafik dasar atau grid. Cara lain, yang lebih mudah, adalah dengan menggunakan paket bundar . Fungsi yang akan Anda gunakan adalah ' rose.diag ':

data = c(35, 78, 34, 25, 21, 17, 22, 19, 25, 18, 25, 21, 16, 20, 26, 
                 19, 24, 18, 23, 25, 24, 25, 71, 27)
three_palettes = c(brewer.pal(12, "Set3"), brewer.pal(8, "Accent"), 
                   brewer.pal(9, "Set1"))
rose.diag(data, bins=24, main="Daily Site Traffic by Hour", col=three_palettes)
doug
sumber
4
Menyalin kode Anda, saya mendapatkan plot yang sangat berbeda (itu sangat jelek); ada yang tahu kenapa? Saya mendapatkan peringatan ini: 1: Dalam as.circular (xx [, 1]): sebuah objek dipaksa ke kelas 'melingkar' menggunakan nilai default untuk komponen berikut: ketik: 'sudut' unit: 'radian' template: ' none 'modulo:' asis 'zero: 0 rotasi:' counter 'rose.diagdata24Trafik Situs Harian oleh Hourthree_palettes
datayoda
Saya memiliki masalah yang sama.
crayola
Anda dapat melakukan ini dengan plot garis juga. Bisa jadi agak sulit dibaca, tetapi bisa juga sangat bagus untuk data yang lebih terperinci, atau data yang mengalami lebih dari satu siklus (misal plot sepuluh siklus, lalu plot rata-rata).
naught101
1
Saya juga kesulitan mereplikasi plot. Saya akhirnya memutuskan lebih mudah menggunakan ggplot2. Saya telah meninggalkan demo singkat tentang Rpubs dengan kode dan hasil: rpubs.com/mattbagg/circular
MattBagg
1
setara dengan ggplot2:qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
naught101
54

Jika plot pencar Anda memiliki begitu banyak poin sehingga menjadi berantakan, cobalah plot pencar yang dihaluskan. Berikut ini sebuah contoh:

library(mlbench) ## this package has a smiley function
n <- 1e5 ## number of points
p <- mlbench.smiley(n,sd1 = 0.4, sd2 = 0.4) ## make a smiley :-)
x <- p$x[,1]; y <- p$x[,2]
par(mfrow = c(1,2)) ## plot side by side
plot(x,y) ## left plot, regular scatter plot
smoothScatter(x,y) ## right plot, smoothed scatter plot

The hexbinpaket (disarankan oleh @Dirk Eddelbuettel) digunakan untuk tujuan yang sama, namun smoothScatter()memiliki keuntungan bahwa itu milik graphicspaket, dan dengan demikian bagian dari instalasi R standar.

Smiley sebagai plot pencar biasa atau halus

nullglob
sumber
6
Demi kelengkapan, Anda juga dapat memperoleh efek ini di ggplot dengan menggunakan transparansi (alpha).), Dalam kombinasi dengan geom point.
Paul Hiemstra
1
apakah ini sama dengan estimasi kepadatan kernel, atau hanya serupa?
endolith
30

Mengenai sparkline dan ide Tufte lainnya, paket YaleToolkit pada CRAN menyediakan fungsi sparklinedan sparklines.

Paket lain yang berguna untuk dataset yang lebih besar adalah hexbin karena secara cerdik 'sampah' data menjadi ember untuk berurusan dengan dataset yang mungkin terlalu besar untuk plot sebar naif.

Dirk Eddelbuettel
sumber
4
Memberi +1 ke grafik mini. Saat ini saya sedang mengerjakan sebuah paket yang berfokus pada pembuatan grafik mini di R-- mereka membuat tambahan yang bagus untuk tabel dalam laporan Sweave.
Sharpie
1
Keren! Saya tidak terlalu senang dengan apa yang dimiliki Jay di YaleToolkit dan akan senang memiliki grafik mini di meja!
Dirk Eddelbuettel
Saya baru saja mendokumentasikan cara untuk menghasilkan grafik mini yang hanya digunakan plotdalam pembaruan untuk pertanyaan saya , dengan bantuan dari posting forum Tufte
Ben
1
The Hmisc::latex()Versi output dari Hmisc::describetermasuk mini-histogram yang akan disertakan dalam tabel.
IRTFM
28

Plot biola (yang menggabungkan box box dengan kepadatan kernel) relatif eksotis dan cukup keren. The vioplot paket di R memungkinkan Anda untuk membuat mereka cukup mudah.

Berikut sebuah contoh (Tautan wikipedia juga menunjukkan contoh):

masukkan deskripsi gambar di sini

Jason Sundram
sumber
3
Petak biola juga tersedia melalui paket kisi:bwplot(... panel = panel.violin)
David J.
3
Versi ggplot2 plot biola akan segera hadir. github.com/wch/ggplot2/wiki/geom_violin
Roman Luštrik
Saya tidak menggunakan plot biola yang tipis, saya lebih suka menunjukkan semua titik dengan jitter.
Nakx
25

Visualisasi seri waktu bagus lainnya yang baru saja saya ulas adalah "bump chart" (seperti yang ditampilkan dalam posting ini di blog "Learning R" ). Ini sangat berguna untuk memvisualisasikan perubahan posisi seiring waktu.

Anda dapat membaca tentang cara membuatnya di http://learnr.wordpress.com/ , tetapi seperti inilah hasilnya:

teks alternatif

Shane
sumber
Saya memang suka grafik benjolan untuk data khusus ini, tetapi mengalami kesulitan memikirkan situasi yang lebih umum di mana itu akan berguna. Yang mengatakan, saya pikir kita semua bisa setuju bahwa blog Learning R mengguncang kaus kaki.
Ian Fellows
7
Bump chart adalah plot koordinat paralel dari data yang diperingkat.
Hadley
1
ini mengingatkan saya pada slopegraph yang baik untuk mewakili perubahan peringkat dari waktu ke waktu atau hubungan antar peringkat: charliepark.org/slopegraphs
topchef
21

Saya juga menyukai modifikasi boxplot Tufte yang memungkinkan Anda melakukan perbandingan banyak kecil dengan lebih mudah karena sangat "tipis" secara horizontal dan tidak mengacaukan plot dengan tinta yang berlebihan. Namun, ini bekerja paling baik dengan sejumlah kategori yang cukup besar; jika Anda hanya memiliki beberapa plot, plot kotak (Tukey) biasa terlihat lebih baik karena mereka memiliki sedikit lebih banyak bobot untuk mereka.

library(lattice)
library(taRifx)
compareplot(~weight | Diet * Time * Chick, 
  data.frame=cw , 
  main = "Chick Weights",
  box.show.mean=FALSE,
  box.show.whiskers=FALSE,
  box.show.box=FALSE
  )

tempat perbandingan

Cara lain untuk membuat ini (termasuk jenis lain boxplot Tufte) dibahas dalam pertanyaan ini .

Ari B. Friedman
sumber
@dococzig Terima kasih. Suatu hari saya akan menulis ulang untuk mengambil konfigurasi pengelompokan yang berbeda. Saya telah belajar banyak sejak saya menulis fungsi itu!
Ari B. Friedman
1
Saya suka plot Anda jauh lebih baik daripada tufte, yang sangat sulit dibaca. Saya masih berpikir bahwa boxplots gaya Tukey lebih baik, meskipun kompromi yang baik mungkin seperti apa yang Anda miliki di sini, tetapi dengan garis lebar 3px untuk kotak, alih-alih offset 1px. Dan saya pikir garis horisontal lebar 1px untuk median mungkin lebih rapi, dan lebih tepat.
naught101
19

Kita tidak boleh lupa tentang plot batang dan daun yang lucu dan (secara historis) penting (yang juga disukai Tufte!). Anda mendapatkan gambaran numerik langsung dari kepadatan dan bentuk data Anda (tentu saja jika kumpulan data Anda tidak lebih besar dari sekitar 200 poin). Di R, fungsi stemmenghasilkan dislay batang dan daun Anda (di ruang kerja). Saya lebih suka menggunakan gstemfungsi dari paket fmsb untuk menggambarnya langsung di perangkat grafis. Di bawah ini adalah varian suhu tubuh berang-berang (data harus dalam dataset default Anda) dalam tampilan batang-demi-daun:

  require(fmsb)
  gstem(beaver1$temp)

masukkan deskripsi gambar di sini

Geek On Acid
sumber
15

Selain karya Tufte yang luar biasa, saya merekomendasikan buku-buku oleh William S. Cleveland: Memvisualisasikan Data dan Unsur - unsur Data Grafik . Tidak hanya mereka sangat baik, tetapi mereka semua dilakukan dalam R, dan saya percaya kode ini tersedia untuk umum.

Peter Flom
sumber
14

Plot kotak! Contoh dari bantuan R:

boxplot(count ~ spray, data = InsectSprays, col = "lightgray")

Menurut pendapat saya ini adalah cara yang paling praktis untuk melihat data atau membandingkan distribusi. Untuk distribusi yang lebih kompleks ada ekstensi yang disebut vioplot.

mbq
sumber
2
Beanplot dapat disebutkan di sini juga jstatsoft.org/v28/c01/paper dan cran.r-project.org/web/packages/beanplot/index.html
radek
Boxplot bukankah itu kurang digunakan, bukan? Maksudku yakin, di banyak makalah grafik batang digunakan untuk data yang harus boxplotted, tetapi mereka masih cukup umum.
nucky101
11

Plot mosaik bagi saya tampaknya memenuhi keempat kriteria yang disebutkan. Ada contoh di r, di bawah mosaicplot.

Peter Flom
sumber
3
Implementasi plot mosaik yang lebih baik ada di perpustakaan vcd (nama fungsi 'mosaik'). Ini memiliki metode tanda tangan yang jauh lebih fleksibel dan diimplementasikan dalam grid (daripada sistem grafis 'dasar').
doug
10

Lihatlah karya Edward Tufte dan terutama buku ini

Anda juga dapat mencoba dan menangkap presentasi perjalanannya . Ini cukup bagus dan termasuk bundel empat bukunya. (Aku bersumpah aku tidak memiliki stok penerbitnya!)

Omong-omong, saya suka teknik visualisasi data sparkline-nya. Mengherankan! Google sudah menulisnya dan mengeluarkannya di Google Code

Paul Sasik
sumber