2015-08-25 18 views
7
değişkeni ..level.. olarak ayarlanmış bir ısı haritası oluştururken bazı örnekler gördüm. Bu gibi, bu örnekte olduğu gibi

ne yapar? .. ggplot içinde ne anlama gelir? :: stat_density2d

:

library(MASS) 
ggplot(geyser, aes(x = duration, y = waiting)) + 
    geom_point() + 
    geom_density2d() + 
    stat_density2d(aes(fill = ..level..), geom = "polygon") 

I ..level..fill mevcut katmanların nispi miktarı ayarlanır anlamına gelir şüpheli? Birisi bana, bu 2B yoğunluklu grafikleri nasıl yorumlayacağına, her konturun neyi temsil ettiğine vb. Online arama yaptım ama uygun bir rehber bulamadım.

cevap

6

@hrbrmstr tarafından sağlanan yanıtın genişletilmesi - ilk olarak, geom_density2d() numaralı telefona yapılan çağrı gereksizdir.

base_plot <- ggplot(geyser, aes(x = duration, y = waiting)) + 
    geom_point() 

base_plot + 
    stat_density2d(aes(color = ..level..)) 

Plot1

base_plot + 
    stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE) 
: en neler olduğunu netleştirmeye yardımcı olabilecek bu yoğunluk tahmini görselleştirmek için başka yollar düşünelim

library(ggplot2) 
library(MASS) 

gg <- ggplot(geyser, aes(x = duration, y = waiting)) + 
    geom_point() + 
    stat_density2d(aes(fill = ..level..), geom = "polygon") 

: Yani aynı sonuçlar elde edebilirsiniz vardır

Plot2

base_plot + 
    stat_density2d(aes(alpha = ..density..), geom = "tile", contour = FALSE) 

Bununla birlikte, geom_point()'dan üretilen noktaları artık göremiyoruz.

Plot3

Son olarak, yoğunluk tahmini bant genişliğini kontrol edebilirsiniz unutmayın. onlar stat_density2d() çağrısına arkasında olduğu gibi

base_plot + 
    stat_density2d(aes(fill = ..density..), geom = "raster", contour = FALSE, 
       h = c(2, 5)) 

Plot4

Yine geom_point() gelen noktalar gizlidir: Bunu yapmak için, biz h için x ve y bant genişliği argümanları (?kde2d bakınız) geçmektedir.

+0

Hala bu haritayı nasıl yorumlayacağımı anlamıyorum, daha yüksek yoğunluklu/seviyeli olanlar dışındakiler daha olasıdır. Bekleme/süre kombinasyonu, 0.05 seviyesine sahip olandan iki kat daha fazla 0.1 kat seviyesinde midir? Ölçümü sayımlarla nasıl ilişkilendirebilirim? Nasıl hesaplandığını bilmek güzel olurdu (bu sorunun kapsamı dışında ise "mankenler" tavsiyesi için bir ders kitabı büyük ölçüde takdir edilecektir). – user1420372

+0

@ user1420372 Olasılık ve yoğunluk eğrileri hakkında bazı temelleri araştırırdım. [Bu gönderi] (http://stats.stackexchange.com/a/147893) stats.stackexchange'den de yardım etmelidir. [Bu gönderi] (http://stackoverflow.com/q/11546256/2572423) da yararlı olduğunu kanıtlamalıdır - temel olarak iki yüzey yoğunluğunu bir yüzeyde görselleştiriyoruz. – JasonAizkalns

+1

çok faydalı .. ama bu soruya beni yönlendiriyor: http://stackoverflow.com/questions/34939054/r-ggmap-countour-plot-convert-level-to-events-per-squared-area-of-distance – user1420372

7

stat_ işlevleri yeni değerleri hesaplar ve yeni veri çerçeveleri oluşturur. Bu bir level değişkenli bir veri çerçevesi oluşturur.

library(ggplot2) 
library(MASS) 

gg <- ggplot(geyser, aes(x = duration, y = waiting)) + 
    geom_point() + 
    geom_density2d() + 
    stat_density2d(aes(fill = ..level..), geom = "polygon") 

gb <- ggplot_build(gg) 

head(gb$data[[3]]) 

##  fill level  x  y piece group PANEL 
## 1 #132B43 0.002 3.876502 43.00000  1 1-001  1 
## 2 #132B43 0.002 3.864478 43.09492  1 1-001  1 
## 3 #132B43 0.002 3.817845 43.50833  1 1-001  1 
## 4 #132B43 0.002 3.802885 43.65657  1 1-001  1 
## 5 #132B43 0.002 3.771212 43.97583  1 1-001  1 
## 6 #132B43 0.002 3.741335 44.31313  1 1-001  1 

..level.. yeni inşa veri çerçevesi içinde bu sütunu referans ggplot söyler: grafiği çizilerek vs ggplot_build kullanmak durumunda görebilirsiniz.

n <- 100 
h <- c(bandwidth.nrd(geyser$duration), bandwidth.nrd(geyser$waiting)) 
dens <- kde2d(geyser$duration, geyser$waiting, n=n, h=h) 
df <- data.frame(expand.grid(x = dens$x, y = dens$y), z = as.vector(dens$z)) 
head(df) 

##   x y   z 
## 1 0.8333333 43 9.068691e-13 
## 2 0.8799663 43 1.287684e-12 
## 3 0.9265993 43 1.802768e-12 
## 4 0.9732323 43 2.488479e-12 
## 5 1.0198653 43 3.386816e-12 
## 6 1.0664983 43 4.544811e-12 

Ve ayrıca çokgenler almak için contourLines arayarak: Kaputun altında

, ggplot (bu farklı arsa sınırlarını kullanır% 100 olarak bunun bir çoğaltma, vb değildir) benzer bir şey yapıyor.

This, konuya iyi bir giriş niteliğindedir. Ayrıca R help'de ?kde2d'a bakın.

+5

Teşekkürler. Fakat hangi sütun .. o zamandan yaratılır? – uncool

+0

Teşekkürler, 'kde2d()' yoğunluk haritasının dışa aktarılmasına yardımcı oldu. – Matt