我无法用ggplot2创建一个数字。 在这个图中,我使用geom_bar绘制三个因子。我的意思是,对于每个“时间”和“剂量”,我正在绘制两个条形(两种基因型)。
这是我的代码,直到现在(实际上我改变了一些设置,但我正在展示它的需要):
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添加这些点,但我没有成功。
答案 0 :(得分: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。也许aes也是,我没有运行程序所以我不知道。
答案 1 :(得分: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)