一次构建(或删除)ggplot facet 面板
Build (or delete) panels of ggplot facet one at a time
我正在做一个演示文稿,其中有助于“构建”多面 ggplot 对象的元素。例如,对于一个双面板分面图,我希望能够在幻灯片中显示第一个左侧面板,仍然格式化为分面,然后前进到第二张幻灯片,同时显示左侧和右侧面板,格式完全相同。另一种思考方式是我想创建一个双面图,然后“清除”右侧图,但保持所有其他元素(如布局)完全相同。我可以在图形包中手动执行此操作,但更愿意在代码中执行此操作。
# example of 1x2 facetted plot_model output
library(sjPlot)
mtcars %>%
mutate(vs_fct = as.factor(vs)) %>%
lm(mpg ~ wt * cyl * vs_fct, data = .) %>%
plot_model(type = "pred", terms = c("wt", "cyl", "vs_fct"))
第一张幻灯片上的左面板图像(右面板在图形软件中被手动删除):
带有两个面板的第二张幻灯片上的图像:
也许你可以使用 gtable
包 ()?
# example of 1x2 facetted plot_model output
library(tidyverse)
library(sjPlot)
plt <- mtcars %>%
mutate(vs_fct = as.factor(vs)) %>%
lm(mpg ~ wt * cyl * vs_fct, data = .) %>%
plot_model(type = "pred", terms = c("wt", "cyl", "vs_fct"))
library(grid)
library(gtable)
library(lemon)
# create gtable object
gt = ggplot_gtable(ggplot_build(plt))
print(gt)
#> TableGrob (13 x 15) "layout": 22 grobs
#> z cells name grob
#> 1 0 ( 1-13, 1-15) background rect[plot.background..rect.349]
#> 2 1 ( 8- 8, 5- 5) panel-1-1 gTree[panel-1.gTree.226]
#> 3 1 ( 8- 8, 9- 9) panel-2-1 gTree[panel-2.gTree.241]
#> 4 3 ( 6- 6, 5- 5) axis-t-1-1 zeroGrob[NULL]
#> 5 3 ( 6- 6, 9- 9) axis-t-2-1 zeroGrob[NULL]
#> 6 3 ( 9- 9, 5- 5) axis-b-1-1 absoluteGrob[GRID.absoluteGrob.245]
#> 7 3 ( 9- 9, 9- 9) axis-b-2-1 absoluteGrob[GRID.absoluteGrob.249]
#> 8 3 ( 8- 8, 8- 8) axis-l-1-2 zeroGrob[NULL]
#> 9 3 ( 8- 8, 4- 4) axis-l-1-1 absoluteGrob[GRID.absoluteGrob.253]
#> 10 3 ( 8- 8,10-10) axis-r-1-2 zeroGrob[NULL]
#> 11 3 ( 8- 8, 6- 6) axis-r-1-1 zeroGrob[NULL]
#> 12 2 ( 7- 7, 5- 5) strip-t-1-1 gtable[strip]
#> 13 2 ( 7- 7, 9- 9) strip-t-2-1 gtable[strip]
#> 14 4 ( 5- 5, 5- 9) xlab-t zeroGrob[NULL]
#> 15 5 (10-10, 5- 9) xlab-b titleGrob[axis.title.x.bottom..titleGrob.308]
#> 16 6 ( 8- 8, 3- 3) ylab-l titleGrob[axis.title.y.left..titleGrob.311]
#> 17 7 ( 8- 8,11-11) ylab-r zeroGrob[NULL]
#> 18 8 ( 8- 8,13-13) guide-box gtable[guide-box]
#> 19 9 ( 4- 4, 5- 9) subtitle zeroGrob[plot.subtitle..zeroGrob.345]
#> 20 10 ( 3- 3, 5- 9) title titleGrob[plot.title..titleGrob.344]
#> 21 11 (11-11, 5- 9) caption zeroGrob[plot.caption..zeroGrob.347]
#> 22 12 ( 2- 2, 2- 2) tag zeroGrob[plot.tag..zeroGrob.346]
显示地块布局
gtable_show_names(gt)
删除与 panel-2-
相关的所有内容
rm_grobs <- gt$layout$name %in% c("panel-2-1", "strip-t-2-1",
"axis-t-2-1", "axis-b-2-1",
"axis-l-1-2", "axis-r-1-2", "ylab-r")
# remove grobs
gt$grobs[rm_grobs] <- NULL
gt$layout <- gt$layout[!rm_grobs, ]
# check result
gtable_show_names(gt)
查看修改后的情节
grid.newpage()
grid.draw(gt)
由 reprex package (v1.0.0)
于 2021-03-21 创建
我正在做一个演示文稿,其中有助于“构建”多面 ggplot 对象的元素。例如,对于一个双面板分面图,我希望能够在幻灯片中显示第一个左侧面板,仍然格式化为分面,然后前进到第二张幻灯片,同时显示左侧和右侧面板,格式完全相同。另一种思考方式是我想创建一个双面图,然后“清除”右侧图,但保持所有其他元素(如布局)完全相同。我可以在图形包中手动执行此操作,但更愿意在代码中执行此操作。
# example of 1x2 facetted plot_model output
library(sjPlot)
mtcars %>%
mutate(vs_fct = as.factor(vs)) %>%
lm(mpg ~ wt * cyl * vs_fct, data = .) %>%
plot_model(type = "pred", terms = c("wt", "cyl", "vs_fct"))
第一张幻灯片上的左面板图像(右面板在图形软件中被手动删除):
带有两个面板的第二张幻灯片上的图像:
也许你可以使用 gtable
包 (
# example of 1x2 facetted plot_model output
library(tidyverse)
library(sjPlot)
plt <- mtcars %>%
mutate(vs_fct = as.factor(vs)) %>%
lm(mpg ~ wt * cyl * vs_fct, data = .) %>%
plot_model(type = "pred", terms = c("wt", "cyl", "vs_fct"))
library(grid)
library(gtable)
library(lemon)
# create gtable object
gt = ggplot_gtable(ggplot_build(plt))
print(gt)
#> TableGrob (13 x 15) "layout": 22 grobs
#> z cells name grob
#> 1 0 ( 1-13, 1-15) background rect[plot.background..rect.349]
#> 2 1 ( 8- 8, 5- 5) panel-1-1 gTree[panel-1.gTree.226]
#> 3 1 ( 8- 8, 9- 9) panel-2-1 gTree[panel-2.gTree.241]
#> 4 3 ( 6- 6, 5- 5) axis-t-1-1 zeroGrob[NULL]
#> 5 3 ( 6- 6, 9- 9) axis-t-2-1 zeroGrob[NULL]
#> 6 3 ( 9- 9, 5- 5) axis-b-1-1 absoluteGrob[GRID.absoluteGrob.245]
#> 7 3 ( 9- 9, 9- 9) axis-b-2-1 absoluteGrob[GRID.absoluteGrob.249]
#> 8 3 ( 8- 8, 8- 8) axis-l-1-2 zeroGrob[NULL]
#> 9 3 ( 8- 8, 4- 4) axis-l-1-1 absoluteGrob[GRID.absoluteGrob.253]
#> 10 3 ( 8- 8,10-10) axis-r-1-2 zeroGrob[NULL]
#> 11 3 ( 8- 8, 6- 6) axis-r-1-1 zeroGrob[NULL]
#> 12 2 ( 7- 7, 5- 5) strip-t-1-1 gtable[strip]
#> 13 2 ( 7- 7, 9- 9) strip-t-2-1 gtable[strip]
#> 14 4 ( 5- 5, 5- 9) xlab-t zeroGrob[NULL]
#> 15 5 (10-10, 5- 9) xlab-b titleGrob[axis.title.x.bottom..titleGrob.308]
#> 16 6 ( 8- 8, 3- 3) ylab-l titleGrob[axis.title.y.left..titleGrob.311]
#> 17 7 ( 8- 8,11-11) ylab-r zeroGrob[NULL]
#> 18 8 ( 8- 8,13-13) guide-box gtable[guide-box]
#> 19 9 ( 4- 4, 5- 9) subtitle zeroGrob[plot.subtitle..zeroGrob.345]
#> 20 10 ( 3- 3, 5- 9) title titleGrob[plot.title..titleGrob.344]
#> 21 11 (11-11, 5- 9) caption zeroGrob[plot.caption..zeroGrob.347]
#> 22 12 ( 2- 2, 2- 2) tag zeroGrob[plot.tag..zeroGrob.346]
显示地块布局
gtable_show_names(gt)
删除与 panel-2-
rm_grobs <- gt$layout$name %in% c("panel-2-1", "strip-t-2-1",
"axis-t-2-1", "axis-b-2-1",
"axis-l-1-2", "axis-r-1-2", "ylab-r")
# remove grobs
gt$grobs[rm_grobs] <- NULL
gt$layout <- gt$layout[!rm_grobs, ]
# check result
gtable_show_names(gt)
查看修改后的情节
grid.newpage()
grid.draw(gt)
由 reprex package (v1.0.0)
于 2021-03-21 创建