2016-11-08 156 views
-1

我正在爲我想繪製爲單個文件的許多數據集擬合劑量響應曲線。繪製大量地塊的圖形

這裏有一個數據集的樣子:

df <- data.frame(dose=c(10,0.625,2.5,0.156,0.0391,0.00244,0.00977,0.00061,10,0.625,2.5,0.156,0.0391,0.00244,0.00977,0.00061,10,0.625,2.5,0.156,0.0391,0.00244,0.00977,0.00061),viability=c(6.12,105,57.9,81.9,86.5,98.3,96.4,81.8,27.3,85.2,80.8,92,82.5,110,90.2,76.6,11.9,89,35.4,79,95.8,117,82.1,95.1),stringsAsFactors=F) 

這裏的劑量 - 反應適合:

pred.df <- expand.grid(dose=exp(seq(log(max(df$dose)),log(min(df$dose)),length=100))) 
pred <- predict(fit,newdata=pred.df,interval="confidence") 
pred.df$viability <- pred[,1] 
pred.df$viability.low <- pred[,2] 
pred.df$viability.high <- pred[,3] 

library(drc) 
fit <- drm(viability~dose,data=df,fct=LL.4(names=c("Slope","Lower Limit","Upper Limit","ED50"))) 

現在我爲了繪製曲線預測值

這就是單個情節的樣子:

library(ggplot2) 
p <- ggplot(df,aes(x=dose,y=viability))+geom_point()+geom_ribbon(data=pred.df,aes(x=dose,y=viability,ymin=viability.low,ymax=viability.high),alpha=0.2)+labs(y="viability")+ 
    geom_line(data=pred.df,aes(x=dose,y=viability))+coord_trans(x="log")+theme_bw()+scale_x_continuous(name="dose",breaks=sort(unique(df$dose)),labels=format(signif(sort(unique(df$dose)),3),scientific=T))+ggtitle(label="all doses") 

添加一些參數估計的情節:

params <- signif(summary(fit)$coefficient[-1,1],3) 
names(params) <- c("lower","upper","ed50") 
p <- p + annotate("text",size=3,hjust=0,x=2.4e-3,y=5,label=paste(sapply(1:length(params),function(p) paste0(names(params)[p],"=",params[p])),collapse="\n"),colour="black") 

其中給出:

enter image description here

現在假設我有這20我想在一個單一的數字文件上補習班。

我認爲,一個合理的解決方案是使用grid.arrange

正如我將回路設置在這個示例數據20倍的例子:

plot.list <- vector(mode="list",20) 
for(i in 1:20){ 
    plot.list[[i]] <- ggplot(df,aes(x=dose,y=viability))+geom_point()+geom_ribbon(data=pred.df,aes(x=dose,y=viability,ymin=viability.low,ymax=viability.high),alpha=0.2)+labs(y="viability")+ 
    geom_line(data=pred.df,aes(x=dose,y=viability))+coord_trans(x="log")+theme_bw()+scale_x_continuous(name="dose",breaks=sort(unique(df$dose)),labels=format(signif(sort(unique(df$dose)),3),scientific=T))+ggtitle(label="all doses")+ 
    annotate("text",size=3,hjust=0,x=2.4e-3,y=5,label=paste(sapply(1:length(params),function(p) paste0(names(params)[p],"=",params[p])),collapse="\n"),colour="black") 
} 

然後用陰謀:

library(grid) 
library(gridExtra) 
grid.arrange(grobs=plot.list,ncol=3,nrow=ceiling(length(plot.list)/3)) 

enter image description here

w ^這顯然是縮小的。所以我的問題是如何用更好的縮放比例來創建這個圖形 - 這意味着所有的對象都會按比例壓縮,從而產生一個仍然在視覺上互相干擾的圖形。

+0

打印到文件,並使用大值'height'和'width'。也許可以削減冗餘標籤。或者將所有的預測結合到一個數據框中並使用'facet_wrap'。 – Gregor

+0

'png(「myplot.png」,width = 1600,height = 2400); grid.arrange(...); dev.off()' – Gregor

+0

順便說一句,你不需要在grid.arrange()中指定nrow和ncol。 – baptiste

回答

1

您應該設置設備大小,以便繪圖保持可讀性,例如,

pl = replicate(11, qplot(1,1), simplify = FALSE) 
g = arrangeGrob(grobs = pl, ncol=3) 
ggsave("plots.pdf", g, width=15, height=20) 

enter image description here