gpt4 book ai didi

r - 如何在facet_wrap中添加表达式到标签?

转载 作者:行者123 更新时间:2023-12-02 17:30:12 25 4
gpt4 key购买 nike

我有一个数据集,我想从中绘制小倍数,特别是在 2×2 数组中,如下所示:

mydf <- data.frame(letter = factor(rep(c("A", "B", "C", "D"), each = 20)), x = rnorm(80), y = rnorm(80))
ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_wrap(~ letter, ncol = 2)

但是,我希望每个方面标签都包含一个表达式,例如

expression(paste("A or ", alpha))

我可以使用facet_grid()来实现这一点通过

f_names <- list('A' = expression(paste("A or ", alpha)), 'B' = expression(paste("B or ", beta)), 'C' = expression(paste("C or ", gamma)), 'D' = expression(paste("D or ", delta)))
f_labeller <- function(variable, value){return(f_names[value])}
ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_grid(~ letter, labeller = f_labeller)

但是随后我丢失了 2×2 数组。如何重命名facet_wrap()带有表达式的方面标签?或者,如何通过使用 facet_grid() 重新创建 2×2 数组来解决这个问题,但仅由单个变量进行分面?

(这个问题基于 @baptiste 对 this previous question 的回答中的括号注释。)

谢谢!

最佳答案

为了完成我的要求,首先从@Roland首次出现here加载这个贴标器函数:

facet_wrap_labeller <- function(gg.plot,labels=NULL) {
#works with R 3.0.1 and ggplot2 0.9.3.1
require(gridExtra)

g <- ggplotGrob(gg.plot)
gg <- g$grobs
strips <- grep("strip_t", names(gg))

for(ii in seq_along(labels)) {
modgrob <- getGrob(gg[[strips[ii]]], "strip.text",
grep=TRUE, global=TRUE)
gg[[strips[ii]]]$children[[modgrob$name]] <- editGrob(modgrob,label=labels[ii])
}

g$grobs <- gg
class(g) = c("arrange", "ggplot",class(g))
g
}

然后保存原始的ggplot()对象:

myplot <- ggplot(mydf, aes(x = x, y = y)) + geom_smooth(method = "lm") + geom_point() + facet_wrap(~ letter, ncol = 2)

然后调用facet_wrap_labeller()并将表达式标签作为参数提供:

facet_wrap_labeller(myplot, labels = c(expression(paste("A or ", alpha)), expression(beta), expression(gamma), expression(delta)))

表达式现在应显示为 facet_wrap() 标签。

关于r - 如何在facet_wrap中添加表达式到标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19282897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com