【问题标题】:How to add a 2nd y-axis for a density plot superimposed on a histogram in R?如何为叠加在 R 中的直方图上的密度图添加第二个 y 轴?
【发布时间】:2013-04-26 05:41:09
【问题描述】:

我有一个如下所示的直方图,并在其上添加了 2 个密度图。它对应于构成数据的 2 个类。

我想在右侧添加第二个 y 轴,但与第一个 y 轴具有相同的高度,以便密度图的高度看起来不那么小。 2个密度图的相对高度必须直接可比,使得它们的组合面积为1

【问题讨论】:

  • 对无代码和无数据投反对票。
  • 你可以使用'latticeExtra'包中的doubleYScale。请参阅此link 了解更多信息。

标签: r histogram density-plot


【解决方案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`

【讨论】:

  • 感谢您的回答!有没有办法让密度图的相对高度可以直接比较。请记住,对于构成直方图的 2 类数据,我在这里有 2 个密度图。另外,如何找出密度值,即第二个 y 轴的值应该是多少?
  • 您可以执行max(density(z)$y) 之类的操作来获取每个密度的上限,然后相应地指定轴。对于两个密度,您显然会分别为每个密度执行此操作,然后为第二个密度重复 plot(density(z), ...) 位。
【解决方案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..))

【讨论】:

  • 感谢您的回答!我在原来的问题中犯了一个错误。 2 个密度图的总面积应等于 1,以便它们可以直接比较。由于直方图显示了整个数据,但 2 个密度图显示了 1 个类别的数据,因此它们的高度也应该更小。在你的情节中,我只看到 1 个轴。我想要右侧的第二个 y 轴显示密度。
猜你喜欢
  • 2012-03-04
  • 2020-08-24
  • 2017-01-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-20
  • 2020-02-05
相关资源
最近更新 更多