r - 向ggplot图添加表格

标签 r ggplot2

我有剂量 react 数据:

df <- data.frame(dose=c(10,0.625,2.5,0.15625,0.0390625,0.0024414,0.00976562,0.00061034,10,0.625,2.5,0.15625,0.0390625,0.0024414,0.00976562,0.00061034,10,0.625,2.5,0.15625,0.0390625,0.0024414,0.00976562,0.00061034),viability=c(6.117463479317,105.176885855348,57.9126197628863,81.9068445005286,86.484379347143,98.3093580807309,96.4351897372596,81.831197750164,27.3331232120347,85.2221817678203,80.7904933803092,91.9801454635583,82.4963735273569,110.440066995265,90.1705406346481,76.6265869905362,11.8651732228561,88.9673125759484,35.4484427232156,78.9756635057238,95.836828982968,117.339025930735,82.0786828300557,95.0717213053837),stringsAsFactors=F)

我使用 drc 将对数逻辑模型拟合到这些数据中。 R包裹:
library(drc)
fit <- drm(viability~dose,data=df,fct=LL.4(names=c("Slope","Lower Limit","Upper Limit","ED50")))

然后我使用标准误差绘制这条曲线:
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(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.df <- cbind(data.frame(param=gsub(":\\(Intercept\\)","",rownames(summary(fit)$coefficient)),stringsAsFactors=F),data.frame(summary(fit)$coefficient))
      rownames(params.df) <- NULL

ann.df <- data.frame(param=gsub(" Limit","",params.df$param),value=signif(params.df[,2],3),stringsAsFactors=F)
rownames(ann.df) <- NULL
xmin <- sort(unique(df$dose))[1]
xmax <- sort(unique(df$dose))[3]
ymin <- df$viability[which(df$dose==xmin)][1]
ymax <- max(pred.df$viability.high)
p <- p+annotation_custom(tableGrob(ann.df),xmin=xmin,xmax=xmax,ymin=ymin,ymax=ymax)

但得到错误:
Error: annotation_custom only works with Cartesian coordinates 

任何的想法?

还,
一旦绘制,有没有办法抑制行名?

最佳答案

我不确定是否有办法绕过 annotation_custom “基础”中的错误ggplot2 .但是,您可以使用 draw_grob来自 cowplot包以添加表 grob(如 here 所述)。

请注意,在 draw_grob x-y 坐标给出了表格 grob 左下角的位置(“ Canvas ”的宽度和高度的坐标从 0 到 1):

library(gridExtra)
library(cowplot)

ggdraw(p) + draw_grob(tableGrob(ann.df, rows=NULL), x=0.1, y=0.1, width=0.3, height=0.4)

enter image description here

另一种选择是求助于 grid职能。我们在绘图内创建一个视口(viewport) p在该视口(viewport)中绘制表格 grob。
library(gridExtra)
library(grid)

绘制情节p您已经创建的:
p

在绘图内创建视口(viewport) p并画出 table 。在这种情况下,x-y 坐标给出了视口(viewport)中心的位置,因此也给出了表格 grob 的中心:
vp = viewport(x=0.3, y=0.3, width=0.3, height=0.4)
pushViewport(vp)
grid.draw(tableGrob(ann.df, rows=NULL))

enter image description here

更新:要删除表格 grob 的背景颜色,您可以操纵表格 grob 主题元素。请参见下面的示例。我还证明了这些数字的合理性,以便它们在小数点上对齐。有关编辑表 grobs 的更多信息,请参阅 tableGrob vignette .
thm <- ttheme_minimal(
  core=list(fg_params = list(hjust=rep(c(0, 1), each=4), 
                             x=rep(c(0.15, 0.85), each=4)),
            bg_params = list(fill = NA)),
  colhead=list(bg_params=list(fill = NA)))

ggdraw(p) + draw_grob(tableGrob(ann.df, rows=NULL, theme=thm), 
                      x=0.1, y=0.1, width=0.3, height=0.4)

enter image description here

关于r - 向ggplot图添加表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40335838/

相关文章:

r - R中的嵌套字典

r - 使用 cbind 动态扩展数据框列

旋转 ggplot 树状图的标签

r - 如何使用R精确匹配整个数据集中的两列值

r - 向 ggplot 添加自定义颜色

r - 如何在ggplot中制作虚线、双虚线和实线

r - 当 R 中使用大量数字时,Sapply 会产生 NA

r - 在 R 中绘制组距离

r - 使用 Reduce 向 ggplot 添加图层

r - 多变量图的 geom_segment 线垂直