2013-03-27 51 views
15

我感到困惑的geom_density以下變量的ggplot含義:如何解釋不同的ggplot2密度?

能有人請解釋這四個調用之間的區別:

  1. geom_density(aes_string(X = 'MYVAR'))VS
  2. geom_density(aes_string(x ='myvar',y ='.. density ..'))VS
  3. geom_density(aes_string(x ='myvar',y ='.. scaled ..'))VS
  4. geom_density(aes_string(x ='myvar',y ='.. count ../ sum(.. count ..)'))?

我的理解是:

  • geom_density獨自將產生一個密度曲線下的款項,其面積爲1
  • geom_density..density..基本上不相同......?
  • ..count../sum(..count..)將正常化峯高更像一個標準化直方圖,確保所有的高度在它
  • 總和爲1
  • ..count..本身沒有分母只是乘每個箱由項目#該..scaled..參數將使它所以密度的最大值爲1

我發現..scaled..非常違反直覺的,沒見過它用,如果我對它的解釋是正確的,所以我想忽略。我主要在尋找一個geom_density和一種歸一化密度圖之間的區別,我假設需要...count../...參數。謝謝。

(相關:Error with ggplot2 mapping variable to y and using stat="bin"

+3

無關:您確實需要停止引用'aes()'中的變量。除非你使用'aes_string',否則你不應該那樣做。 – joran 2013-03-27 16:43:56

+0

@joran:我正在使用'aes_string',對不起,我正在使用rpy2,因此它總是'aes_string' – user248237dfsf 2013-03-28 00:56:06

+0

只是想知道的讀者。這個問題已經被編輯,以解決關於'aes'和'aes_string'的問題。這個錯誤不是這個問題的核心。 – Deleet 2017-01-28 17:27:58

回答

10

stat_density默認的審美是..density..,所以geom_density調用它默認使用stat_density,將默認繪製y = ..density..

你可以看到不同的列是如何通過看source code

..scaled..計算值被定義爲

densdf$scaled <- densdf$y/max(densdf$y, na.rm = TRUE) 

隨意,如果你想忽略它。

望着source code for stat_bin

的結果被計算爲這樣

res <- within(results, { 
    count[is.na(count)] <- 0 
    density <- count/width/sum(abs(count), na.rm=TRUE) 
    ncount <- count/max(abs(count), na.rm=TRUE) 
    ndensity <- density/max(abs(density), na.rm=TRUE) 
    }) 

所以,如果你想比較的geom_histogram結果(使用默認stat = 'bin'),那麼你可以設置y = ..density..,它會爲你計算count/sum(count)(佔箱子寬度)

如果你想比較geom_density(aes(y=..scaled..))stat_bin,那麼你可以使用geom_histogram(aes(y = ..ndensity..))

你可以通過使用兩個..count..以及讓他們以相同的規模,但是你需要調整stat_densityadjust參數,以獲得曲線的適當的詳細逼近。