在 gtable_filter 之后只绘制一个 grob

Plot only one grob after gtable_filter

我正在尝试 select 或调整我在过滤标签后创建的这个图形的图边距,我留下了这个我想去掉的白色部分,如图所示在图像上。

谢谢

在我的可重现代码下面:

df=structure(list(Estimate = c(0.1784, 0.073, 0.0619, 0.1367, 0.1795, 
0.087), name = structure(c(1L, 6L, 5L, 4L, 3L, 2L), .Label = c("Intercept", 
"Doctor spouse", "8 years experience", "3 years experience", 
"1 year experience", "Female"), class = "factor"), group = structure(c(1L, 
2L, 3L, 3L, 3L, 4L), .Label = c("Intercept", "Male to", "0 Years Experience to", 
"No Spouse to"), class = "factor"), upper.95 = c(0.209, 0.0899, 
0.0858, 0.1606, 0.2034, 0.1077), lower.95 = c(0.1478, 0.0561, 
0.038, 0.1129, 0.1556, 0.0662), resp_type = c("Legislator", "Legislator", 
"Legislator", "Legislator", "Legislator", "Legislator")), row.names = c(NA, 
                                                                        -6L), class = c("tbl_df", "tbl", "data.frame"))

library(ggplot2)
library(tidyverse)
library(gridExtra)
library(gtable)

p1=df %>%
  filter(name!="Intercept") %>%
  ggplot(aes(x = name, y= Estimate*100))+
  geom_point(shape = 1)+
  geom_hline(yintercept = 0, lty = "longdash")+
  geom_errorbar(aes(ymax = upper.95*100, ymin = lower.95*100), width = 0.001)+
  coord_flip()+
  facet_grid(group ~.,scales = "free", space = "free", switch = "y")+
  theme(strip.placement = "outside",
        strip.text.y.left = element_text(face = "bold", angle=0, vjust = 1))+
  xlab("")



gg=ggplotGrob(p1)
plot_filtered2 <- gtable_filter(gg, 
                     "(background|panel|strip_l|axis-b|ylab-l|guide-box|title)", trim=TRUE)


grid.newpage()
grid.draw(plot_filtered2)

您可以通过在 theme() 中为每个元素指定 element_blank() 来省略要放入 ggplot() 调用本身的绘图元素,从而获得这种效果。

library(tidyverse)

df <- structure(list(Estimate = c(0.1784, 0.073, 0.0619, 0.1367, 0.1795, 0.087), name = structure(c(1L, 6L, 5L, 4L, 3L, 2L), .Label = c("Intercept", "Doctor spouse", "8 years experience", "3 years experience", "1 year experience", "Female"), class = "factor"), group = structure(c(1L, 2L, 3L, 3L, 3L, 4L), .Label = c("Intercept", "Male to", "0 Years Experience to", "No Spouse to"), class = "factor"), upper.95 = c(0.209, 0.0899, 0.0858, 0.1606, 0.2034, 0.1077), lower.95 = c(0.1478, 0.0561, 0.038, 0.1129, 0.1556, 0.0662), resp_type = c("Legislator", "Legislator", "Legislator", "Legislator", "Legislator", "Legislator")), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"))

df %>%
  filter(name != "Intercept") %>%
  ggplot(aes(x = name, y = Estimate * 100)) +
  geom_point(shape = 1) +
  geom_hline(yintercept = 0, lty = "longdash") +
  geom_errorbar(aes(ymax = upper.95 * 100, ymin = lower.95 * 100), width = 0.001) +
  coord_flip() +
  facet_grid(group ~ .,
             scales = "free",
             space = "free",
             switch = "y") +
  xlab(NULL) +
  theme(strip.text = element_blank(),
        strip.background = element_blank(),
        axis.text.y = element_blank(),
        axis.ticks.y = element_blank()
        )

reprex package (v2.0.1)

于 2022-02-15 创建

从您所在的位置执行此操作的最简单方法(假设您希望保留从 gtable 中选择的所有元素,并且出于某种原因不想通过简单地使用来获得相同的效果element_blank 正如 Dan Adams 所建议的那样)是将 gtable 的前 6 列的宽度设置为 0 厘米:

plot_filtered2$widths[1:6] <- unit(rep(0, 6), "cm")
grid.newpage()
grid.draw(plot_filtered2)