我正在尝试打印带有多个图的pdf。 我正在使用循环和ggplot,这也是一个函数内部。 我在注释'剧情。 我想注释该条件的中位数和整体中位数。 我使用水平线(geom_hline)和注释(' text')来标记这些线。
问题是单词正确放置(即注释("文本",x = 1,y = Cmedian)似乎正常工作,但水平线正在被错误绘制location(即geom_hline(aes(yintercept = Cmedian)不起作用。它总是把Cmedian线放在30,而allmedian线放在22.
我有时会感到奇怪' ggplot在循环或函数中的行为,我想知道如何避免这种情况。
感谢任何帮助。 谢谢,
suspect_conds<-c(head(suspect_SumPheno[rev(order(suspect_SumPheno$zscore)),],n=20)$condition,tail(suspect_SumPheno[rev(order(suspect_SumPheno$zscore)),],n=20)$condition)
pdf(paste(out_dir,paste(set,org,"bar.SuspectConditionssumPhenoPerPlate.pdf",sep="."),sep=""))
for (i in 1:length(suspect_conds)){
cond<-suspect_conds[i]
cond_subset<-PhenoSumPerPlatPerCond[PhenoSumPerPlatPerCond$condition==cond,]
Cmedian<-median(cond_subset$sum_pheno)
allmedian<-median(PhenoSumPerPlatPerCond$sum_pheno)
plateMedians<-aggregate(sum_pheno~plate,data=PhenoSumPerPlatPerCond,median)
p<-ggplot(cond_subset, aes(x=plate, y=sum_pheno, fill=plate)) + geom_bar(stat="identity") +
labs(title=paste("total phenotypes per plate in",cond,sep=" ")) +
geom_hline(aes(yintercept=Cmedian), colour="black")+ geom_hline(aes(yintercept=allmedian), colour="black",linetype="dashed")+
annotate("text", x = 1, y = Cmedian, label = "median number of phenotypes per plate in this condition",hjust=0,vjust=0)+
annotate("text", x = 1, y = allmedian, label = "median number of phenotypes per plate",hjust=0,vjust=0)+
geom_point(data=plateMedians,aes(x=plate,y=sum_pheno),colour="black",size=4)+
theme_bw()
print(p,file=paste(out_dir,paste(set,org,cond,"bar.sumPhenoPerPlate.pdf",sep="."),sep=""))
}
dev.off()
答案 0 :(得分:1)
我认为这个问题与List for Multiple Plots from Loop (ggplot2)有关。正如那里提到的,你唯一需要做的就是用aes_string(...)替换aes(...)。