我想添加一个表格,其中包含一些信息,这些信息在构面中的每个面板中都会有所不同。 我正在使用ggplot2和facet_grid。
说我想为每个面板添加某种描述性统计数据,但它们不一定相同。 这些统计数据放在我为此目的制作的df中。
我找到了一些方法将这些表添加到图表中,但是:
library(datasets)
data(mtcars)
ggplot(data = mpg, aes(x = displ, y = hwy, color = drv)) +
geom_point() +
facet_wrap( ~ cyl,scales="free_y")
桌子的位置对我来说并不重要,但我不希望它与图表重叠。
我的目标是该线程中两个答案之间的混合: Adding table to ggplot with facets
第一个答案(带注释)对我来说不起作用,因为我希望每个图中的表都是唯一的。) 第二个答案更好,但我不希望它重叠或隐藏图表中的一些细节,并且在每个面板中的线/散点位于不同的位置,所以我不能像这样使用它。我希望它能像注释一样被附加。
答案 0 :(得分:1)
try this
library(ggplot2)
library(tibble)
library(gridExtra)
library(grid)
GeomCustom <- ggproto(
"GeomCustom",
Geom,
setup_data = function(self, data, params) {
data <- ggproto_parent(Geom, self)$setup_data(data, params)
data
},
draw_group = function(data, panel_scales, coord) {
vp <- grid::viewport(x=data$x, y=data$y)
g <- grid::editGrob(data$grob[[1]], vp=vp)
ggplot2:::ggname("geom_custom", g)
},
required_aes = c("grob","x","y")
)
geom_custom <- function(mapping = NULL,
data = NULL,
stat = "identity",
position = "identity",
na.rm = FALSE,
show.legend = NA,
inherit.aes = FALSE,
...) {
layer(
geom = GeomCustom,
mapping = mapping,
data = data,
stat = stat,
position = position,
show.legend = show.legend,
inherit.aes = inherit.aes,
params = list(na.rm = na.rm, ...)
)
}
gl <- list(tableGrob(iris[1:2,1:3]),
tableGrob(iris[1:4,1:3]),
tableGrob(iris[1:3,1:3]),
tableGrob(iris[1:2,1:2]))
dummy <- tibble(f=letters[1:4], grob = gl )
d <- tibble(x=rep(1:3, 4), f=rep(letters[1:4], each=3))
ggplot(d, aes(x,x)) +
facet_wrap(~f) +
theme_bw() +
geom_custom(data=dummy, aes(grob=grob), x = 0.5, y = 0.5)