2013-05-02 190 views
-2

我有下面顯示的直方圖,並且我已經在其上添加了2個密度圖。它對應於組成數據的2個類。如何添加疊加在R中直方圖上的密度圖的第2個y軸?

histogram 我想在右側添加第2個y軸,但它的高度與第1個y軸相同,因此密度圖的高度看起來不會太小。 2個密度圖的相對高度必須以直接比較,使得它們的組合面積爲1

+3

Downvoting for no code and沒有數據。 – 2013-05-02 06:43:33

+0

您可以使用'latticeExtra'包中的'doubleYScale'。有關更多信息,請參閱此鏈接(http://latticeextra.r-forge.r-project.org/#doubleYScale&theme=default)。 – fdetsch 2013-05-02 07:20:48

回答

1
z <- rnorm(100,.3,.2) 
hist(z, xlab="", ylab="", main="", yaxt="n") 
par(new=TRUE) 
plot(density(z), xlab="", ylab="", main="", xaxt="n", yaxt="n") 
axis(2, ...) # plug in the relevant values for `at` and `labels` 
axis(4, ...) # plug in the relevant values for `at` and `labels` 
+0

感謝您的回答!我有沒有辦法讓密度圖的相對高度可以直接比較。請記住,我在這裏爲組成直方圖的兩類數據提供了2個密度圖。另外,如何找出密度值,即第二個y軸的值應該是多少? – Cheng 2013-05-02 19:07:18

+0

你可以像'max(density(z)$ y)'這樣做來獲得每個密度的上限,然後相應地指定座標軸。對於兩種密度,顯然你可以分別爲每種密度做這個,然後重複第二密度的「密度(密度(z),...)」位。 – Thomas 2013-05-02 19:44:45

2

如果使用ggplot2可以使用geom_density(aes(y=..scaled..))geom_histogram(aes(y = ..ndensity))比例同樣

例如

x <- rnorm(400, 10, 5) 
y <- rnorm(400, -10, 5) 
dd <- rbind(data.frame(value = x, id = 'x'), data.frame(value = y, id = 'y')) 
ggplot(dd, aes(x=value)) + 
    geom_histogram(aes(y=..ndensity..)) + 
    geom_density(aes(colour = id, y = ..scaled..)) 

enter image description here

+0

謝謝你的回答!我在原來的問題上犯了一個錯誤。 2個密度圖的總面積應該等於1,以便它們可以直接比較。由於直方圖顯示了整個數據,但是2個密度圖顯示了1個類的數據,所以它們的高度也應該更小。 在你的情節,我只看到1軸。我想在右邊的第二個Y軸顯示密度。 – Cheng 2013-05-02 19:55:40