2016-09-28 20 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) 

您可能需要在geom_text語句中使用參數hjust和vjust。也許還有一個,我沒有運行該程序,所以我不知道。

+1

非常感謝你,斯蒂芬!你的代碼讓我意識到如何在我的情節中添加點。其實我用不同的方式寫了,但我按照你的說法組織了我的數據!我創建了一個「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

謝謝馬克!你和Stephen幫助我瞭解我應該如何組織我的數據。我用'dose,time,genotype,b,mean(b),x'創建了一個數據集。正如你所看到的,我創建了一個「x」列來指示這些點應該在X軸上進行繪圖的位置! 我也寫道: 'geom_point(data = data,aes(y =「mean(b)」,x = x),color =「red」,size = 1.5)'繪製右邊座標上的點。有效! 非常感謝! –

相關問題