在 R 中自定义 facet_wrap 绘图标签?
Posted
技术标签:
【中文标题】在 R 中自定义 facet_wrap 绘图标签?【英文标题】:Customize facet_wrap plot label in R? 【发布时间】:2022-01-19 22:34:32 【问题描述】:我正在 R 中创建一个 facet_wrap
绘图,并且我正在尝试自动化 labeller
。我可以使用以下代码手动创建自定义标签:
library(ggplot2)
library(tidyverse)
df <- data.frame(a = rep(c(1/8,1/4,1/2), each = 100),
b = rep(c("A", "B", "C", "D"), each = 25),
x = rnorm(100))
names <- c(
`0.125` = "alpha~`=`~1/8",
`0.25` = "alpha~`=`~1/4",
`0.5` = "alpha~`=`~1/2"
)
df %>% ggplot() +
geom_density(aes(x = x, colour = b))+
facet_wrap(~a, labeller = labeller(a = as_labeller(names, label_parsed)))
上面的代码产生了这个图:
facetplot
如您所见,我在 names
变量中创建自定义名称,然后将其传递给 labeller
参数。我想想出一种方法来自动化这个过程。所以我可以使用任何名称向量。有什么建议吗?
【问题讨论】:
【参考方案1】:我想我有一个可能的解决方案。如果用户提供了一个个性化的值向量,比如vec <- c(1/5, 'Hello', 3.14)
,那么我循环遍历粘贴 alpha 的 unicode 值vector
的每个值并并将其变成一个列表 s>。在此之后,我创建了一种虚拟函数,其中包含我的新标签标题列表并将其传递给 labeller 函数:
# EDIT: removed loop with help from comments!
#nam <- NULL
# for(i in 1:(length(vec)))
# nam[i] <- list(paste0('\u03b1',"=", vec[i]))
#
nam <- paste0('\u03b1',"=", vec)
custLab <- function (x)
nam
p <- df %>% ggplot() +
geom_density(aes(x = x, colour = b))+
facet_wrap(~a, labeller = as_labeller((custLab)))
这会产生以下结果:
【讨论】:
感谢您的回答!你不需要循环,只需要paste0('\u03b1',"=", vec)
。
你说得对...我会更新我的答案以反映这一点!以上是关于在 R 中自定义 facet_wrap 绘图标签?的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化分面图(facet_wrap)使用labeller参数自定义设置分面图标签栏(灰色标签栏)的高度
在 R 中使用带有 facet_wrap 的 ggplot2 显示多个轴标签
R语言ggplot2可视化删除所有分面图(facet_wrap可视化的facet结果)的标签实战(Remove facet_wrap labels)