2013-05-02 186 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