修改 ggplot 中的 facet (strip) *variable* 标签

Posted

技术标签:

【中文标题】修改 ggplot 中的 facet (strip) *variable* 标签【英文标题】:Modify facet (strip) *variable* labels in ggplot 【发布时间】:2021-12-12 17:11:20 【问题描述】:

假设我有以下数据集:

set.seed(1212)
a = sample(c("A", "B"), size=100, replace=T)
x = rnorm(100)
y = model.matrix(~a + x) %*% c(0, .5, .5) + rnorm(100, 0)
d = data.frame(a=a, x=x, y=y)

我可以很容易地生成一个 ggplot 面板变量a

p = ggplot(d, aes(x=x, y=y)) + 
  geom_point() + 
  geom_smooth(method="lm") +
  facet_grid(~a, labeller=label_both)
p

我还可以轻松修改 X/Y 的标签:

p + labs(x="My X Label", y="My Y Label")

但我不知道如何轻松更改条带的标签。这些都不起作用:

p + labs(x="My X Label", y="My Y Label", strip = "A")
p + labs(x="My X Label", y="My Y Label", grid = "A")
p + labs(x="My X Label", y="My Y Label", panel = "A")
p + labs(x="My X Label", y="My Y Label", wtf = "A")

我知道我可以更改我的变量名:

ggplot(d %>% rename(`A Fancy Label` = a),
       aes(x=x,y=y)) +
  geom_point() +
  geom_smooth() + 
  facet_grid(~`A Fancy Label`, labeller=label_both)

或者我可以使用某种自定义贴标机。但是,我正在制作 ggplot 图形within my R package,并且标注器内置在 R 包中,不能轻易修改。

那么,现在我的问题是:如何以不需要我修改实际变量或使用某些自定义贴标器功能的方式更改构面的变量标签?

经过大量谷歌搜索,我只能找到如何更改方面的值标签,而不是方面的变量标签(例如,this question/answer)。

提前致谢!

【问题讨论】:

这里定义的 global_labeller() 函数有帮助吗? ggplot2.tidyverse.org/reference/labeller.html 不是最优的。我宁愿在绘图后更改标签(就像分层一样),而不是更改生成绘图的函数。 【参考方案1】:

这可能不是完美的。但是,您可以通过在 facet_grid 函数中添加“Fancy Label”来在构面标签上使用相同的标签。

p = ggplot(d, aes(x=x, y=y)) + 
  geom_point() + 
  geom_smooth(method="lm") +
  facet_grid(~ "Fancy Label" + a)  
  
p  + labs(x="My X Label", y="My Y Label")

【讨论】:

感谢您的建议,我可能不得不求助于此。我宁愿在绘图已经生成后对其进行修改,这样我就不必修改绘图函数的内部工作原理(即 flexplot 函数)。这将需要向函数添加另一个参数,我试图将其最小化,因为该函数已经有 20 多个参数。

以上是关于修改 ggplot 中的 facet (strip) *variable* 标签的主要内容,如果未能解决你的问题,请参考以下文章

移除 ggplot facet strip 标签周围的三边边框

R语言ggplot2可视化分面图(faceting)可视化分面条形图(facet_wrap bar plot)使用strip.text函数自定义分面图每个分面标题条带strip的大小(cutomi

strip.position external in 两列 facet_wrap 图

使用 ggplot facet_grid 或 facet_wrap 时修改面板轴的特定主题参数

ggplot 改变每一个分面的颜色

Facet_Wrap标题与ggplotly中的y轴重叠?