2016-09-28 12 views
1

У меня возникли проблемы с созданием фигуры с ggplot2. В этом сюжете я использую geom_bar для построения трех факторов. Я имею в виду, что за каждое «время» и «дозу» я рисую два бара (два генотипа).Как построить среднее значение одного коэффициента в штриховом шкафу с

Чтобы быть более точным, это то, что я имею в виду: enter image description here

Это мой код до сих пор (на самом деле я изменил некоторые настройки, но я представляю только то, что нужно для):

ggplot(data=data, aes(x=interaction(dose,time), y=b, fill=factor(genotype)))+ 
geom_bar(stat="identity", position="dodge")+ 
scale_fill_grey(start=0.3, end=0.6, name="Genotype") 

Вопрос: Я намерен добавить среднее значение каждого времени с использованием очков и что эти точки находятся только в середине баров определенного . Как я могу продолжить?

Я попытался добавить эти точки, используя geom_dotplot и geom_point, но мне это не удалось.

ответ

1
library(dplyr) 
time_data = data %>% group_by(time) %>% summarize(mean(b)) 
data <- inner_join(data,time_data,by = "time") 

это дает вам данные с прилагаемыми средствами. Теперь сделайте сюжет

ggplot(data=data, aes(x=interaction(dose,time), y=b,fill=factor(genotype)))+ 
geom_bar(stat="identity", position="dodge")+ 
scale_fill_grey(start=0.3, end=0.6, name="Genotype")+ 
geom_text(aes(b),vjust = 0) 

Вам может понадобиться возиться с аргументом hjust и vjust в заявлении geom_text. Может быть, и один, я не запускал программу, поэтому не знаю.

+1

Большое спасибо, Стивен! Ваш код заставляет меня понять, как добавить точки в мой сюжет. На самом деле я писал по-другому, но я организовал свои данные, как вы сказали! 'geom_point (data = data, aes (y =" mean (b) ", x = x), color =" red ", size = 1.5)' Я создал столбец «x», чтобы указать, где эти точки должен быть сюжет! Это сработало. Еще раз большое спасибо! –

1

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

sampleData <- 
    data.frame(
    dose = 1:3 
    , time = rep(1:3, each = 3) 
    , genotype = rep(c("AA","aa"), each = 9) 
    , b = rnorm(18, 20, 5) 
) 

Вам нужно вычислить средства где-нибудь, и я решил сделать это на лету. Обратите внимание, что вместо использования точек я использовал строку, чтобы показать, что среднее значение для всех этих значений. Я также сортировал несколько по-другому и использовал facet_wrap для объединения вещей. Точкам было бы гораздо сложнее разместить, особенно при использовании position_dodge, но вы, скорее всего, измените этот код, чтобы это сделать.

ggplot(
    sampleData 
    , aes(x = dose 
     , y = b 
     , fill = genotype) 
) + 
    geom_bar(position = "dodge", stat = "identity") + 
    geom_hline(data = 
       sampleData %>% 
       group_by(time) %>% 
       summarise(meanB = mean(b) 
         , dose = NA, genotype = NA) 
      , aes(yintercept = meanB) 
      , col = "black" 
      ) + 
    facet_wrap(~time) 

enter image description here

+0

Спасибо, Марк! Вы и Стивен помогли мне понять, как мне организовать свои данные. Я создал набор данных с «дозой, временем, генотипом, b, средним (b), x'. Как вы можете видеть, я создал столбец «x», чтобы указать, где эти точки должны быть построены по оси X! Я также писал: 'geom_point (data = data, aes (y =" mean (b) ", x = x), color =" red ", size = 1.5)' для построения точек в правых координатах , Это сработало! Еще раз большое спасибо! –