Как добавить строки с фасетом R - PullRequest
1 голос
/ 28 сентября 2019

Итак, у меня есть граненый график, и я хочу иметь возможность добавлять в него линии, которые меняются в зависимости от каждого аспекта.

Вот код:

p <- ggplot(mtcars, aes(x=wt))+
  geom_histogram(bins = 20,aes(fill = factor(cyl)))+
  facet_grid(.~cyl)+
  scale_color_manual(values = c('red','green','blue'))+
  geom_vline(xintercept = mean(mtcars$wt))

p

Итак, мой вопросКак бы я понял, чтобы на графике отображалось среднее значение каждого граненого подграфа.

Надеюсь, это имеет смысл, и я ценю ваше время, независимо от ваших возможностей ответа.

1 Ответ

2 голосов
/ 28 сентября 2019

Вы можете сделать это в вызове ggplot, используя stat_summaryh из пакета ggstance.В приведенном ниже коде я также изменил scale_colour_manual на scale_fill_manual в предположении, что вы пытаетесь установить цвета заливки столбцов гистограммы:

library(tidyverse)
library(ggstance)

ggplot(mtcars, aes(x=wt))+
  geom_histogram(bins = 20,aes(fill = factor(cyl)))+
  stat_summaryh(fun.x=mean, geom="vline", aes(xintercept=..x.., y=0), 
                colour="grey40") +
  facet_grid(.~cyl)+
  scale_fill_manual(values = c('red','green','blue')) +
  theme_bw()

enter image description here

Другой вариант - рассчитать желаемое значение в пределах geom_vline (это реализация итогового подхода, предложенного @Ben).В приведенном ниже коде . - это местоимение, которое относится к фрейму данных (в данном случае mtcars), который был передан в ggplot:

ggplot(mtcars, aes(x=wt))+
  geom_histogram(bins = 20,aes(fill = factor(cyl)))+
  geom_vline(data = . %>% group_by(cyl) %>% summarise(wt=mean(wt)), 
             aes(xintercept=wt), colour="grey40") +
  facet_grid(.~cyl)+
  scale_fill_manual(values = c('red','green','blue')) +
  theme_bw()
...