R 如何使用ggplot2封闭X轴标签?

R 如何使用ggplot2封闭X轴标签?,r,ggplot2,plot,bar-chart,R,Ggplot2,Plot,Bar Chart,我想用ggplot2将我的绘图X轴标签附在下面的图片中,但我不知道怎么做,你能帮我吗?非常感谢 您可以在绘图上绘制一个矩形: library(dplyr) library(ggplot2) tibble::rownames_to_column(mtcars) %>% ggplot(aes(rowname, mpg)) + geom_col() + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + lab

我想用ggplot2将我的绘图X轴标签附在下面的图片中,但我不知道怎么做,你能帮我吗?非常感谢


您可以在绘图上绘制一个矩形:

library(dplyr)
library(ggplot2)

tibble::rownames_to_column(mtcars) %>%
  ggplot(aes(rowname, mpg)) + 
  geom_col() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(x = "name")

grid::grid.rect(x = unit(32, "pt"), y = unit(5.5, "pt"), 
                height = unit(0.265, "npc"), width = unit(0.93, "npc"), 
                vjust = 0, hjust = 0, gp = grid::gpar(fill = NA))

但是,一种更可靠的方法是将ggplot转换为grobtree,找到表示底轴面积的grob,并用rectGrob覆盖其第一个成员(即zeroGrob),这样在重新缩放矩形时矩形不会相对于绘图移动。然后,您可以使用
grid::grid.draw
:

library(dplyr)
library(ggplot2)

p <- tibble::rownames_to_column(mtcars) %>%
  ggplot(aes(rowname, mpg)) + 
  geom_col() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) +
  labs(x = "name")

p2 <- ggplot_gtable(ggplot_build(p))

p2$grobs[[which(p3$layout$name == "axis-b")]]$children[[1]] <- 
  grid::rectGrob(gp = grid::gpar(fill = NA))

grid::grid.newpage()
grid::grid.draw(p2)
库(dplyr)
图书馆(GG2)
p%
ggplot(aes(rowname,mpg))+
geom_col()+
主题(axis.text.x=元素\文本(角度=90,hjust=1))+
实验室(x=“名称”)

p2你说的封闭到底是什么意思?调整绘图窗口的大小不会使标签靠得更近吗?我要做的是用红线将X轴标签括起来。@r2evans我想这只是OP想要的一个框。你说得对,你是在手动获取食物。嗯,你可以在上面画一个矩形作为快捷方式,但是一旦你调整了绘图的大小,你就会遇到麻烦…我试图用有角度的红线来表示文字,没有假设太多,我很高兴你有一个好的解决方案。谢谢@AllanCameron@嘿嘿,既然你是新来的所以。。。当给你的答案解决了你的问题,这是礼节堆栈网站;这样做不仅给回答者提供了一些观点,也为有类似问题的读者提供了一些结尾。当给出多个答案时,虽然您只能接受一个答案,但您可以选择向上投票,只要您认为有帮助。(我建议你回到上一个问题并接受答案。)谢谢!太完美了,非常感谢!