En az kullanılan veri görselleştirmesi [kapalı]


178

Histogramlar ve dağılım grafikleri, verileri ve değişkenler arasındaki ilişkiyi görselleştirmek için harika yöntemlerdir, ancak son zamanlarda hangi görselleştirme tekniklerinin eksik olduğunu merak ediyorum. Sizce en az kullanılan arsa türü nedir?

Cevaplar:

  1. Uygulamada çok yaygın olarak kullanılmaz.
  2. Çok fazla arka plan tartışması olmadan anlaşılabilir olun.
  3. Birçok yaygın durumda uygulanabilir olun.
  4. Bir örnek oluşturmak için tekrar üretilebilir kod ekleyin (tercihen R cinsinden). Bağlantılı bir görüntü iyi olurdu.

13
Bence bu çok faydalı bir tartışma ve kapalı olduğu için üzgünüm.
Alex Brown

2
@AlexBrown: Neden yeniden açmak için oy vermiyorsun? Bu sorunun ifadesinin neden "yapıcı değil" gibi hissettiğini anlayabiliyorum, ancak bu soru, web üzerinde herhangi bir yerde bu konuyla ilgili en düşünceli ve anlayışlı cevapların bir kısmıyla sonuçlandı. Bu cevapların güncellendiğini ve genişletildiğini görmek isterim.
en fazla

2
Bu muhtemelen stats.stackoverflow.com adresine taşınmalıdır. Bu site için çok daha uygun.
naught101

4
Yazık kimse bu kapanmadan önce QQ-parsellerinden bahsetmedi . Çok faydalılar!
naught101

Bu yeniden açılmalıdır.
Peter Flom

Yanıtlar:


89

Diğer posterlere gerçekten katılıyorum: Tufte'nin kitapları fantastik ve okumaya değer.

İlk olarak, bu yılın başlarında " Verilere Bakma " dan ggplot2 ve ggobi hakkında çok güzel bir eğiticiye işaret ederim . Bunun ötesinde, R'den bir görselleştirmeyi ve iki grafik paketini (temel grafikler, kafes veya ggplot kadar yaygın olarak kullanılmaz) vurgulayacağım:

Isı Haritaları

Çok değişkenli verileri, özellikle zaman serisi verilerini işleyebilen görselleştirmeleri gerçekten çok seviyorum. Isı haritaları bunun için yararlı olabilir. Gerçekten temiz olanı David Smith tarafından Devrimler blogunda yer aldı . İşte Hadley'nin ggplot kodu sayesinde:

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)

Hangi sonuç bu gibi görünüyor:

alternatif metin

RGL: Etkileşimli 3D Grafikler

Öğrenmeye gayret eden başka bir paket, etkileşimli 3D grafikler oluşturma yeteneğini kolayca sağlayan RGL'dir . Bunun için çevrimiçi birçok örnek vardır (rgl dokümantasyonu dahil).

R-Wiki'nin rgl kullanarak 3D dağılım çizimlerinin nasıl çizileceğine dair güzel bir örneği var .

GGobi

Bilmeye değer başka bir paket rggobi . Orada konuyla ilgili Springer kitabı büyük bir dokümantasyon sürü / örnekler de dahil olmak üzere çevrimiçi ve "Veri baktığımızda" Elbette.


Güzel. Kodu / resmi eklediğiniz için teşekkür ederiz.
Ian Fellows

her bir düz siyah dikey çizgideki 'Z' veya bükümün dikey konumu ile ne gösterilir?
doug

Bunlar ay sınırlarıdır (aylar aynı gün bitmez).
Shane

3
Bu çok güzel. Ayın sınırlarını nasıl buldunuz?
Alex Brown


58

Dotplots'u gerçekten çok seviyorum ve uygun veri sorunları için başkalarına tavsiye ettiğimde onları her zaman şaşırtıyor ve memnun ediyorlar. Çok fazla fayda görmüyorlar ve nedenini anlayamıyorum.

İşte Quick-R'den bir örnek: araba verisinde dotplot

Cleveland'ın bunların geliştirilmesinden ve duyurulmasından en çok sorumlu olduğuna inanıyorum ve kitabındaki örnek (hatalı verilerin bir nokta grafiğiyle kolayca tespit edildiği), kullanımları için güçlü bir argüman. Yukarıdaki örneğin her satıra yalnızca bir nokta koyduğunu, oysa gerçek güçlerinin her satırda birden fazla noktanın olduğunu ve hangisinin hangisinin olduğunu açıklayan bir açıklama olduğunu unutmayın. Örneğin, üç farklı zaman noktası için farklı semboller veya renkler kullanabilirsiniz ve böylece farklı kategorilerdeki zaman kalıplarını kolayca anlayabilirsiniz.

Aşağıdaki örnekte (her şeyin Excel'de yapıldı!), Hangi kategorinin etiket takasından muzdarip olabileceğini açıkça görebilirsiniz.

2 gruplu dotplot


1
Bir nokta grafiğinin biri anahtar kategorisi olan anahtarlanmış ekseni olan dağılım grafiğinden farkı nedir?
32'de DrSAR

4
@DrSAR Histogram bir çubuk grafikten veya yoğunluk grafiğinden çizgi grafiğinden nasıl farklıdır? Birçok standart grafik türünü daha temel geometriler (cf Bertin'in Semiologie Graphique ) olarak tanımlayabilirsiniz , ancak bu, belirli bir şeyi daha az benzersiz bir şekilde çizme anlayışını yapmaz. Bu durumda, iki parça kategorik bilgiyi (biri dikey, biri çizim karakterinin şekline göre) bir sürekli veri parçasına karşı çiziyorsunuz. Çoğu yazılım paketinde, oluşturmak için bir dağılım grafiğini hacklerken, en önemlisi bir dağılım grafiği değildir.
Ari B. Friedman

2
@ gsk3 Küfür etmek istememiştim. Aslında, şimdi (grafik ve benzer çalışmaların grameri hakkında daha fazla bilgi okuduktan sonra), bu üst düzey ayrımın sunum için oldukça önemli olabileceğini fark ediyorum. Bunu gösterdiğin için teşekkürler.
11:17

@DrSAR Savunma demek istemedim. SO SO yorum sanırım ;-)
Ari B. Friedman

56

Kutupsal koordinatlar kullanan araziler kesinlikle az kullanılmaktadır - bazıları iyi bir sebeple söyleyebilir. Bence bunların kullanımını haklı kılan durumlar yaygın değildir; Ayrıca bu durumlar ortaya çıktığında, kutupsal grafiklerin doğrusal grafiklerin veremediği verileri ortaya çıkarabileceğini düşünüyorum.

Bence bazen verileriniz doğrusal olmaktan ziyade doğası gereği kutupsaldır - örneğin, döngüseldir (24 gün boyunca birden fazla günde zamanları temsil eden x koordinatları) veya veriler daha önce bir polar özellik alanına eşlenmişti.

İşte bir örnek. Bu grafik, bir Web Sitesinin ortalama trafik hacmini saate göre gösterir. 22:00 ve 01:00 de iki sivri dikkat edin. Sitenin ağ mühendisleri için bunlar önemlidir; birbirlerinin yanında da meydana gelmeleri önemlidir (sadece iki saat arayla). Ancak aynı verileri geleneksel bir koordinat sistemine çizerseniz, bu model tamamen gizlenir - doğrusal olarak çizilir, bu iki sivri , birbirini izleyen günlerde sadece iki saat arayla olmasına rağmen, 20 saat arayla olacaktır . Yukarıdaki polar grafik bunu cimri ve sezgisel bir şekilde göstermektedir (bir efsane gerekli değildir).

Site trafiğini gösteren, 1. ve 22. saatlerde zirve noktaları olan kutup grafik

R kullanarak böyle araziler oluşturmak için iki yol (farkında olduğum) vardır (w / R yukarıdaki arsa yarattım). Birincisi, temel veya ızgara grafik sistemlerinde kendi işlevinizi kodlamaktır. Başka bir yol, daha kolay olan, dairesel paketi kullanmaktır . Kullanacağınız işlev ' 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)

4
Kodunuzu kopyalayarak, çok farklı bir arsa alıyorum (bu oldukça çirkin); neden herhangi bir fikir? Bu uyarıyı alıyorum: 1: as.circular (xx [, 1]) içinde: bir nesne, aşağıdaki bileşenler için varsayılan değer kullanılarak 'dairesel' sınıfına zorlanır: type: 'angles' units: 'radians' template: ' none 'modulo:' asis 'sıfır: 0 döndürme:' counter 'rose.diagdata24Günlük Site Trafiği yazan Hourthree_palettes
datayoda

Aynı problemim var.
crayola

Bunu bir çizgi çizimi ile de yapabilirsiniz. Okuması biraz daha zor olabilir, ancak daha ayrıntılı veriler veya birden fazla döngüden geçen veriler için gerçekten harika olabilir (örneğin on döngüyü çizin, sonra ortalamalarını çizin).
naught101

1
Ben de komplo kopyalamakta sorun vardı. Sonunda ggplot2 kullanmanın daha kolay olduğuna karar verdim. Kod ve sonuçları ile Rpubs kısa bir demo bıraktım: rpubs.com/mattbagg/circular
MattBagg

1
ggplot2 eşdeğeri:qplot(y=data, x=1:length(data), fill=factor(1:length(data)), stat='identity', geom='bar') + coord_polar()
naught101 11:14

54

Eğer dağılım grafiğinizde tam bir karışıklık olacak kadar çok nokta varsa, düzgünleştirilmiş bir dağılım grafiğini deneyin. İşte bir örnek:

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

hexbin(@Dirk Eddelbuettel önerdiği) paket aynı amaçla kullanılır, ancaksmoothScatter() bunun için ait olduğu avantajı graphicspaketin ve böylece standart bir R, montaj parçası.

Düzenli veya düzgün bir dağılım grafiği olarak Smiley


6
Tamlık uğruna, bu efekti ggplot'ta saydamlık (alfa) kullanarak da elde edebilirsiniz. Geom noktası ile birlikte.
Paul Hiemstra

1
bu çekirdek yoğunluğu tahmini ile aynı mı, yoksa benzer mi?
endolit

30

Mini grafik ve diğer Tufte fikri ile ilgili olarak , CRAN üzerindeki YaleToolkit paketi işlevler sparklineve sağlar sparklines.

Daha büyük veri kümeleri için yararlı olan başka bir paket, saf dağılım grafikleri için çok büyük olabilecek veri kümeleriyle başa çıkmak için akıllıca verileri kovalar halinde zekice döndürdüğü için hexbin'dir .


4
Mini grafiklere +1. Şu anda R'de mini grafik oluşturmaya odaklanan bir paket üzerinde çalışıyorum - Sweave raporlarındaki tablolara harika eklemeler yapıyorlar.
Sharpie

1
Güzel! Jay'in YaleToolkit'te sahip olduğu şeylerden çok memnun değilim ve tablolarda mini grafikler olmasını isterdim!
Dirk Eddelbuettel

Ben sadece bu Tufte forum sonrası bazı yardımlarla, plotbenim soruya bir güncelleme kullanarak mini grafikler üretmek için bir yol belgeledim
Ben

1
Hmisc::latex()Dan çıktı sürümü Hmisc::describetabloya dahil edildiğinden mini histogram içerir.
IRTFM

28

Keman grafikleri (kutu grafiklerini çekirdek yoğunluğu ile birleştiren) nispeten egzotik ve oldukça havalıdır. vioplot R paket oldukça kolayca yapmanızı sağlar.

İşte bir örnek (wikipedia bağlantısı da bir örnek gösterir):

resim açıklamasını buraya girin


3
Keman parselleri kafes paketi üzerinden de edinilebilir:bwplot(... panel = panel.violin)
David J.

3
keman çizimlerinin ggplot2 versiyonu kısa süre içinde hazır olacak. github.com/wch/ggplot2/wiki/geom_violin
Roman Luštrik

Keman çizimlerinin çok kullanışlı olduğunu düşünmüyorum, bunun yerine tüm noktaları bir titreşim ile göstermeyi seviyorum.
Nakx

25

Sadece gözden geçirdiğim bir diğer güzel zaman serisi görselleştirmesi "yumru grafik" ( "Öğrenme R" blogunda bu yazıda yer aldığı gibi ). Bu, zaman içindeki pozisyon değişikliklerini görselleştirmek için çok kullanışlıdır.

Nasıl oluşturulacağını http://learnr.wordpress.com/ adresinden okuyabilirsiniz. , ancak sonuç olarak şöyle görünür:

alternatif metin


Bu özel veri için çarpma grafiğini seviyorum, ancak kullanımda olacağı daha genel durumları düşünmekte zorlanıyorum. Bununla birlikte, sanırım Hepimiz Learning R blogunun çorapları salladığını kabul edebiliriz.
Ian Fellows

7
Bir yumru grafik, sıralanan verilerin paralel koordinat grafiğidir.
hadley

1
Bu bana zaman içindeki sıralama değişikliğini veya sıralamalar arasındaki ilişkileri temsil etmek için iyi olan eğim grafiğini hatırlatıyor: charliepark.org/slopegraphs
topchef

21

Ayrıca Tufte'un yatay olarak çok "ince" oldukları ve arsa mürekkebi gereksiz mürekkeple karıştırmadıkları için küçük katlar karşılaştırmasını çok daha kolay yapmanıza izin veren kutu grafikleri modifikasyonlarını da seviyorum. Ancak, oldukça fazla sayıda kategori ile en iyi şekilde çalışır; bir arsa üzerinde sadece birkaç tane varsa, normal (Tukey) kutu grafikleri daha iyi görünüyor çünkü onlara biraz daha fazla yük bindiriyorlar.

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
  )

compareplot

Bunları yapmanın diğer yolları (diğer tür Tufte boxplot dahil) bu soruda ele alınmıştır .


@daroczig Teşekkürler. Bu günlerden birinde farklı gruplandırma yapılandırmaları almak için yeniden yazacağım. Bu işlevi yazdığımdan beri çok şey öğrendim!
Ari B. Friedman

1
Ben senin parselleri okumak gülünç zor olan tufte en çok seviyorum. Yine de Tukey tarzı kutu grafiklerinin daha iyi olduğunu düşünüyorum, ancak iyi bir uzlaşma burada sahip olduğunuz gibi bir şey olabilir, ancak 1px ofset yerine kutu için 3 piksel genişliğinde çizgilerle. Bence medyan için 1 piksel genişliğinde bir yatay çizgi muhtemelen daha temiz ve daha doğrudur.
naught101

19

Sevimli ve (tarihsel olarak) önemli gövde ve yaprak planını unutmamalıyız (Tufte'nin de sevdiği!). Veri yoğunluğuna ve şekline doğrudan sayısal bir genel bakış elde edersiniz (tabii ki veri kümeniz yaklaşık 200 noktadan büyük değilse). R'de, işlev stemgövde ve yaprak dislay'inizi üretir (çalışma alanında). Doğrudan bir grafik aygıtta çizmek için fmsbgstem paketindeki işlevi kullanmayı tercih ederim . Aşağıda, yaprak saplı bir ekranda bir kunduz vücut sıcaklığı varyansı (veriler varsayılan veri kümenizde olmalıdır):

  require(fmsb)
  gstem(beaver1$temp)

resim açıklamasını buraya girin



15

Tufte'nin mükemmel çalışmalarına ek olarak, William S. Cleveland: Verileri Görselleştirme ve Verileri Grafikleme Unsurları'nın kitaplarını öneriyorum . Sadece mükemmel değil, ama hepsi R'de yapıldı ve kodun halka açık olduğuna inanıyorum.


14

Kutudiyagramlar! R yardımından örnek:

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

Bence verilere hızlı bir şekilde bakmanın veya dağılımları karşılaştırmanın en kullanışlı yolu. Daha karmaşık dağıtımlar için bir uzantı var vioplot.



Boxplots bu kadar az kullanılmıyor, değil mi? Demek istediğim, birçok makalede, çubuk grafikler, kutu halinde çizilmesi gereken veriler için kullanılır, ancak yine de oldukça yaygındır.
naught101

11

Mozaik araziler bana belirtilen dört kriteri de karşılıyor gibi görünüyor. Mosaplot altında r'de örnekler vardır.


3
Mozaik grafiklerin daha iyi uygulanması vcd kütüphanesinde (işlev adı 'mozaik'). Çok daha esnek bir yöntem imzası vardır ve ızgarada uygulanır ('temel' grafik sisteminden ziyade).
doug

10

Edward Tufte'nin çalışmasına ve özellikle bu kitaba göz atın

Ayrıca onun seyahat sunumu yakalamak ve deneyebilirsiniz . Oldukça iyi ve dört kitabından oluşan bir paket içeriyor. (Yemin ederim yayıncının stokuna sahip değilim!)

Bu arada, onun mini grafik veri görselleştirme tekniğini seviyorum. Sürpriz! Google zaten yazdı ve Google Koduna koydu


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.