使用ggplot facet_wrap绘制每组的中位数

时间:2017-04-04 17:49:35

标签: r ggplot2 dplyr

有问题的数据集是钻石(在dplyr中)。我试图通过使用facet_wrap来削减价格的直方图。我也希望每个情节都有中线。 这就是我做的 -

by_cut <- group_by(diamonds, cut)

med <- by_cut %>% 
  summarise(medn = median(price))

diam <- diamonds %>% 
  mutate(med_cut = ifelse(cut == med$cut[1], med$medn[1],
                      ifelse(cut == med$cut[2], med$medn[2],
                             ifelse(cut == med$cut[3], med$medn[3],
                                    ifelse(cut == med$cut[4], med$medn[4], med$medn[5])))))

diam %>% 
  ggplot(aes(price)) +
  geom_histogram(binwidth = 100) +
  facet_wrap(~ cut, scales = "free_y") +
  geom_vline(aes(xintercept= med_cut), colour='red') 

并获得所需的情节(如下所示,这是我想要的......) - facet_wrap_median

但是我确信这不是实现结果的理想方式,因此我想知道实现最终情节的最佳方法是什么?

基于@yeedle评论

这比以前的尝试更好:

diam <- diamonds %>% 
  group_by(cut) %>% 
  mutate(medn = median(as.numeric(price)))

diam %>% 
  ggplot(aes(price)) +
  geom_histogram(binwidth = 100) +
  facet_wrap(~ cut, scales = "free_y") +
  geom_vline(aes(xintercept= medn, group= cut), colour='red') 

我们可以进一步改进吗?

1 个答案:

答案 0 :(得分:2)

diamonds %>% 
  group_by(cut) %>%
  mutate(med_price = median(as.numeric(price))) %>%
  ggplot(aes(price)) +
     geom_histogram(binwidth = 100) +
     geom_vline(aes(xintercept= med_price), colour='red') +
     facet_wrap(~ cut, scales = "free_y")