【发布时间】:2020-10-06 17:40:56
【问题描述】:
以下是为我的问题提供上下文的示例数据集:
df <- tibble(x1 = factor(sample(letters[1:6], 50, replace = T), levels=letters[1:6]),
x2 = factor(sample(letters[1:6], 50, replace = T), levels=letters[1:6]),
x3 = factor(sample(letters[1:6], 50, replace = T), levels=letters[1:6]),
)
head(df)
我编写了以下函数来生成一个我想在 ggplot2::ggplot() 调用中使用的新 tibble:
plot_data_prep <- function(dsn, pvar){
pvar <- enquo(pvar)
#convert the new plot_df and get it ready for plotting.
plot_data <- dsn %>%
group_by(!!pvar) %>% count(.drop = F) %>% ungroup() %>%
mutate(pct = n/sum(n)*100,
pct_lab = paste0(format(pct, digits = 1),'%'),
pct_pos = pct + 0.6)
return(plot_data)
}
plot_data_prep(df, x3)
我可以在制作单独的绘图时使用这个用户定义的函数:
ggplot(plot_data_prep(df,x3), mapping = aes(x=x3, y=pct))+
geom_bar(stat = 'identity') +
geom_text(aes(x = x3, y = pct_pos, label = pct_lab ))
但是当我尝试使用我的 plot_data_prep() 函数为每个变量生成单独的图时,在数据帧“df”中循环访问变量“x1”、“x2”和“x3”时,出现错误: '错误:列 i 未知'
df_names <- names(df)
for (i in df_names){
plot <- ggplot(plot_data_prep(df, i), mapping = aes_string(x=i, y='n')) +
geom_bar(stat = 'identity') +
geom_text(aes(x = i, y = pct_pos, label = pct_lab ))
print(plot)
}
我希望有人能够帮助我理解为什么我的 for 循环索引变量 'i' 没有解决我需要它来使我的代码工作的方式。
谢谢。
【问题讨论】:
-
看起来你需要 aes_string() 在文本层以及全局美学。