提问人:jf328 提问时间:1/13/2017 最后编辑:AnilGoyaljf328 更新时间:2/4/2022 访问量:78913
更改分面标签文本和背景颜色
Change facet label text and background colour
问:
如何将灰色刻面标签(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()
答:
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'))
评论
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)
评论
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")
stripr
striprt
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
评论