2017-10-13 1300 views
1

說我有這個數據幀dfggplot2,直方圖:爲什麼y = ..density ..和stat =「density」有區別?

structure(list(max.diff = c(6.02, 7.56, 7.79, 7.43, 7.21, 7.65, 
8.1, 7.35, 7.57, 9.09, 6.21, 8.2, 6.82, 7.18, 7.78, 8.27, 6.85, 
6.72, 6.67, 6.99, 7.32, 6.59, 6.86, 6.02, 8.5, 7.25, 5.18, 8.85, 
5.44, 6.44, 7.85, 6.25, 9.06, 8.19, 5.08, 6.26, 8.92, 6.83, 6.5, 
7.55, 7.31, 5.83, 5.55, 4.29, 8.29, 8.72, 9.5)), class = "data.frame", row.names = c(NA, 
-47L), .Names = "max.diff") 

我想繪製這是用ggplot2密度的情節:

p <- ggplot(df, aes(x = max.diff)) 
p <- p + geom_histogram(stat = "density") 
print(p) 

賦予,

enter image description here

現在,一個天真的問題:爲什麼不給出相同的結果?

p <- ggplot(df, aes(x = max.diff)) 
p <- p + geom_histogram(aes(y = ..density..)) 
print(p) 

enter image description here

這是因爲所選擇的binwidth或數bins或其他一些參數的?到目前爲止,我還沒有能夠調整這些參數來使它們相同。還是我策劃了一些完全不同的東西?

回答

0

第二個示例是重新縮放柱狀圖計數,以使柱狀圖區域積分爲1,但與標準ggplot2柱狀圖相同。您可以使用binsbinwidth參數調整條數。

第一個例子是計算核密度估計並將輸出(每個x值處的估計密度)繪製爲直方圖。您可以使用參數adjust更改密度估計的平滑量,以及使用參數n計算密度的點的數量。

geom_histogram的默認值爲bins=30stat="density"的默認值爲adjust=1n=512stat="density"正在使用density函數生成值)。由於density選擇密度估計的帶寬,因此stat="density"輸出比直方圖輸出平滑得多。減少參數可減少平滑量。

下面的前兩個例子是你的情節。第二個使用對各個參數的調整來獲得兩個大致相似的圖,儘管不完全相同,因爲核密度估計仍然使輸出平滑。這只是爲了說明。核密度估計和直方圖是兩個不同的,與思想相關的東西。

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(stat = "density") + 
    ggtitle("stat='density'; default paramters") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(aes(y = ..density..), colour="white") + 
    ggtitle("geom_histogram; default parameters") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(stat = "density", n=2^5, adjust=0.1) + 
    ggtitle("stat='density'; n=2^5; Adjust=0.1") 

ggplot(df, aes(x = max.diff)) + 
    geom_histogram(aes(y = ..density..), bins=2^5, colour="white") + 
    ggtitle("geom_histogram; bins=2^5") 

enter image description here

相關問題