使用geom_bar绘图移动由annotation_custom创建的表

时间:2014-08-17 20:11:27

标签: r ggplot2 geom-bar

我试着寻找答案但却找不到任何答案。

我有一个情节,想要在情节本身中添加一个表格。我可以做到,但桌子最终正好在中间。

如果x轴是离散的,可以重新定位由annotation_custom创建的表吗?如果是这样,怎么样?

谢谢!

例如,我想重新定位此表。

library(ggplot2)
library(gridExtra)

my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))
ggplot(chickwts, aes(feed, weight)) +
       geom_bar(stat = "identity")  +
       annotation_custom(tableGrob(my.table))

1 个答案:

答案 0 :(得分:3)

ggplot2中的自定义注释可以在绘图区域内重新标注。这至少会将它们移出中心。也许这个解决方案已经足够你。我会尝试调整一下。应该可以将它放在绘图区域之外。

library(ggplot2)
library(gridExtra)

my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))
ggplot(chickwts, aes(feed, weight)) +
       geom_bar(stat = "identity")  +
       annotation_custom(tableGrob(my.table), xmin=5,xmax=6,ymin=300,ymax=1300)

修改

要将表格放在图表之外,无论图表包含什么,都可以使用grid包:

library(ggplot2)
library(gridExtra)
library(grid)

# data
my.summary <- summary(chickwts$weight)
my.table   <- data.frame(ids = names(my.summary), nums = as.numeric(my.summary))

# plot items
my.tGrob <- tableGrob(my.table)
plt <- ggplot(chickwts, aes(feed, weight)) +
          geom_bar(stat = "identity")

# layout
vp.layout <- grid.layout(nrow=1, ncol=2, heights=unit(1, "null"),
  widths=unit(c(1,9), c("null","line")) )

# start drawing
grid.newpage()
pushViewport(viewport(layout=vp.layout, name="layout"))
# plot
pushViewport(viewport(layout.pos.row=1, layout.pos.col=1, name="plot"))
print(plt, newpage=FALSE)
upViewport()
# table
pushViewport(viewport(layout.pos.row=1, layout.pos.col=2, name="table"))
grid.draw(my.tGrob)
upViewport()

#dev.off()

Quick PNG