在ggplot2中处理面直方图的不同样本大小

时间:2018-09-19 22:49:17

标签: r ggplot2 histogram facet

我想按年份制作ggplot2中堆叠的(facet_grid)大小直方图。年份具有不同的样本量。我无法获得..density..来为每个直方图bin生成正确的比例。因此,我一直在使用..count.. /(样本大小数字)。根据我对状态转换..count..的阅读,您无法对对象(例如nrow(data))执行操作。如何获得这些具有不同样本量的堆叠直方图?下面代码中的格式将生成一个与报告中其他图形相匹配的图形,这就是为什么我想坚持使用ggplot2的原因,但是也许还有其他软件包。这是一个示例:

d1 <- as.data.frame(round(rnorm(121, 86, 28), 0))
colnames(d1) <- "Length"
d1$Year <- "2015"

d2 <- as.data.frame(round(rnorm(86, 70, 32), 0))
colnames(d2) <- "Length"
d2$Year <- "2016"

D <- rbind(d1, d2)

ggplot(D, aes(x = Length)) +
  geom_histogram(aes(y = ..count../nrow(D)), 
                 breaks=seq(0, 160, by = 3), 
                 col="black", 
                 fill="grey48", 
                 alpha = .8)+
  labs(title = "Size by Year", x = "Length", y = "frequency") +
  scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
  theme_bw() + 
  theme(text = element_text(size=16), 
        axis.text.y = element_text(size=12)) +
  geom_vline(aes(xintercept = 95.25), 
             colour = "red", size = 1.3)+
  facet_grid(Year ~ .)

..count../nrow(D)这部分facet_grid(Year ~ .)不起作用,需要每年的样本量

1 个答案:

答案 0 :(得分:2)

这是您要找的东西吗?您没有指定使用..density..时出了什么问题,但是似乎您只需要按binwidth缩放即可。 ..density..缩放以使总条形区域为1,这意味着每个条形具有高度..count.. / (n * binwidth)。您只希望高度为..count.. / n,即..density.. * binwidth。因此,请手动设置binwidth(无论如何应这样做)并乘以它。

set.seed(1234)
d1 <- as.data.frame(round(rnorm(121, 86, 28), 0))
colnames(d1) <- "Length"
d1$Year <- "2015"

d2 <- as.data.frame(round(rnorm(86, 70, 32), 0))
colnames(d2) <- "Length"
d2$Year <- "2016"

D <- rbind(d1, d2)

library(ggplot2)
ggplot(D, aes(x = Length)) +
  geom_histogram(aes(y = ..density.. * 5), binwidth = 5) +
  geom_vline(aes(xintercept = 95.25), colour = "red", size = 1.3) +
  facet_grid(Year ~ .) +
  labs(title = "Size by Year", x = "Length", y = "frequency") +
  scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
  theme_bw() +
  theme(
    text = element_text(size = 16),
    axis.text.y = element_text(size = 12)
  )

reprex package(v0.2.0)于2018-09-19创建。