R中的facet_grid()的tidy_eval inside labeller()函数
我之前发布了这个以及这个,这可能会给这个问题提供额外的背景 上下文数据:R中的facet_grid()的tidy_eval inside labeller()函数,r,ggplot2,R,Ggplot2,我之前发布了这个以及这个,这可能会给这个问题提供额外的背景 上下文数据: library(tidyverse) library(rlang) set.seed(1) dfr2 <- tibble(x1 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]), x2 = factor(sample(letters[1:2], 50, replace = T), levels=let
library(tidyverse)
library(rlang)
set.seed(1)
dfr2 <- tibble(x1 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]),
x2 = factor(sample(letters[1:2], 50, replace = T), levels=letters[1:2]),
x3 = factor(sample(letters[1:3], 50, replace = T), levels=letters[1:3]),
grpA = factor(sample(c("grp1","grp2"),50, prob=c(0.3, 0.7) ,replace=T), levels = c("grp1", "grp2")),
grpB = factor(sample(c("grp1","grp2"),50, prob=c(0.6, 0.4) ,replace=T), levels = c("grp1", "grp2"))
)
head(dfr2)
数据准备功能的正常使用:
plot_data_prepr(dat = dfr2, groupvar = "grpA", mainvar = "x1")
在下面的labeller()
函数中,我必须显式键入'grpA'
才能使代码正常工作。虽然这会产生具有适当标签的方面标签的预期结果,但这并不是我想要的,因为如果我要循环分组变量,它将阻止我动态更改分组变量:
for(mvar in names(dfr2)[1:3]) {
smvar <- sym(mvar)
gvar <- names(dfr2[4])
sgvar <- sym(gvar)
dd <- plot_data_prepr(dat = dfr2, groupvar = gvar, mainvar = mvar)
lookup <- unique(dd$grp_tot)
plusN <- function(string) {
label <- paste0(string, ' (N = ',lookup,')')
label
}
plot <- ggplot(dd,
aes(x = !!smvar,y = pct2, fill = !!smvar)) +
geom_bar(stat = 'identity') +
ylim(0,1) +
geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
facet_grid(as.formula(paste0(".~", gvar)), labeller = labeller(grpA = plusN))
print(plot)
}
也许有人能帮我解决我的问题
谢谢。据我所知,解决问题的一种方法是使用
labeller
函数,因为facet\u grid
将df传递给labeller函数,其中df的列名是facetting变量的名称。试试这个:
试试这个:
for(名称中的mvar(dfr2)[1:1]){
smvar
for(mvar in names(dfr2)[1:3]) {
smvar <- sym(mvar)
gvar <- names(dfr2[4])
sgvar <- sym(gvar)
dd <- plot_data_prepr(dat = dfr2, groupvar = gvar, mainvar = mvar)
lookup <- unique(dd$grp_tot)
plusN <- function(string) {
label <- paste0(string, ' (N = ',lookup,')')
label
}
plot <- ggplot(dd,
aes(x = !!smvar,y = pct2, fill = !!smvar)) +
geom_bar(stat = 'identity') +
ylim(0,1) +
geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
facet_grid(as.formula(paste0(".~", gvar)), labeller = labeller(grpA = plusN))
print(plot)
}
for(mvar in names(dfr2)[1:3]) {
smvar <- sym(mvar)
gvar <- names(dfr2[4])
sgvar <- sym(gvar)
dd <- plot_data_prepr(dat = dfr2, groupvar = gvar, mainvar = mvar)
lookup <- unique(dd$grp_tot)
plusN <- function(string) {
enquo(string)
label <- paste0(!!string, ' (N = ',lookup,')')
label
}
plot <- ggplot(dd,
aes(x = !!smvar,y = pct2, fill = !!smvar)) +
geom_bar(stat = 'identity') +
ylim(0,1) +
geom_text(aes(label=pct_lab, y = pct_pos + .02)) +
facet_grid(as.formula(paste0(".~", gvar)), labeller = labeller(gvar = plusN))
print(plot)
}