更改分面标签文本和背景颜色

Change facet label text and background colour

提问人:jf328 提问时间:1/13/2017 最后编辑:AnilGoyaljf328 更新时间:2/4/2022 访问量:78913

问:

如何将灰色刻面标签(A 和 B)更改为带有白色文本的红色背景?

library(data.table)
A = data.table(x = 1:4, y = 1:4, z = c('A','A','B','B'))
ggplot(A) + geom_point(aes(x = x, y = y)) + facet_wrap(~z) + theme_bw()

enter image description here

r ggplot2 (英语)

评论


答:

122赞 Haboryme 1/13/2017 #1

您可以执行以下操作:

ggplot(A) +
  geom_point(aes(x = x, y = y)) +
  facet_wrap(~z) +
  theme_bw()+
  theme(strip.background =element_rect(fill="red"))+
  theme(strip.text = element_text(colour = 'white'))

enter image description here

评论

7赞 Sergio 2/9/2018
是否可以只更改一个标签的颜色?假设我有 5 列,我想突出显示中间的一列。
1赞 Haboryme 2/9/2018
@Sergio;我已经很久没有玩ggplot了,因此我无法给出正确的答案,对不起。我可以建议你研究一下grob编辑(警告:乏味),这个答案可能会给你一些灵感。可能有一些更简单的解决方案。
25赞 filups21 2/4/2020 #2

对于其他任何想要更改单个分面标签的人,这里有一个解决方案:

g <- ggplot_gtable(ggplot_build(p))
stripr <- which(grepl('strip-r', g$layout$name))
fills <- c("red","green","blue","yellow")
k <- 1
for (i in stripr) {
  j <- which(grepl('rect', g$grobs[[i]]$grobs[[1]]$childrenOrder))
  g$grobs[[i]]$grobs[[1]]$children[[j]]$gp$fill <- fills[k]
  k <- k+1
}
grid::grid.draw(g)

enter image description here

评论

0赞 vashts85 4/25/2020
我使用的是最新版本的 R,但这不起作用。我收到错误 *tmp*。有什么想法吗?Error in [[j]] : attempt to select less than one element in get1index
0赞 filups21 4/27/2020
1. 我使用的是 R v. 3.6.1,看起来一些绘图组件的名称发生了变化。为了重新创建相同的图,我将上面的第 2 行和第 3 行更改为:和(并且在第 5 行中也更改为 .2. 随着最近对 R 的重大更新,可能会对 ggplot 和 grid 包进行即将到来的更改,这些更改也会改变一些事情。¯_(ツ )_/¯striprt <- which( grepl('strip-r', g$layout$name) | grepl('strip-t', g$layout$name) )fills <- c("red","green","blue","yellow", "red","green","blue")striprstriprt
2赞 Herman Toothrot 3/31/2021
在ggplot中没有办法原生地做到这一点吗?
0赞 Matt 6/16/2021
@vashts85我得到同样的结果。这是因为其中没有任何东西可以寻找。g$grobs[[i]]$grobs[[1]]$childrenOrder)'rect'grepl
1赞 Ahdee 7/16/2021
以防万一其他人需要这个,对于我的新版本,我不得不将 strip-r 更改为 strip-1,您可能需要先通过输入 g$layout$name 来查看您的特定绘图,这就是我如何意识到我的绘图是 -1