首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用quosure内部的ggplot函数注解

使用quosure内部的ggplot函数注解
EN

Stack Overflow用户
提问于 2020-07-17 15:53:10
回答 1查看 143关注 0票数 0

我产生了下面的散点图函数。

代码语言:javascript
复制
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
  xval <- enquo(xval)
  yval <- enquo(yval)
  
  ggplot(data, aes(!!xval, !!yval))+
    geom_smooth(method=lm, se=FALSE)+
    geom_point()+
    theme(axis.line.x.bottom = element_line("black"),
          axis.line.y.left = element_line("black"),
          axis.text.x = element_blank(),
          legend.title = element_blank())+ylab(ylabel)+
    xlab(xlabel)+
    scale_y_continuous(labels = scales::comma)+
    expand_limits(y = 0)+
    geom_smooth(method="lm", se=FALSE, colour="red")+
    annotate("text",
             x=max(!!xval)/2,
             y =0,
             label = labels)
  }

然而,我无法使方程的注释部分发挥作用。如果调用该函数,则会得到错误:

错误:引号只能在准引号上下文中不引用。

坏:

清单(!!)

好:

dplyr::变异(数据)

但是,当我移除代码的注释部分时,它工作得很好。我需要在代码中修改什么才能让它正常工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-17 16:14:14

如果使用ensym捕获符号,则可以在df上下文中捕获它们。

代码语言:javascript
复制
scatter_fun<-function(data,xval,yval,xlabel,ylabel, labels){
  xval <- ensym(xval)
  yval <- ensym(yval)
  
  ggplot(data, aes(!!xval, !!yval))+
    geom_smooth(method=lm, se=FALSE)+
    geom_point()+
    theme(axis.line.x.bottom = element_line("black"),
          axis.line.y.left = element_line("black"),
          axis.text.x = element_blank(),
          legend.title = element_blank())+ylab(ylabel)+
    xlab(xlabel)+
    scale_y_continuous(labels = scales::comma)+
    expand_limits(y = 0)+
    geom_smooth(method="lm", se=FALSE, colour="red")+
    annotate("text",
             x=max(eval(xval, data))/2,
             y =0,
             label = labels)
}

df <- data.frame(x = rnorm(100), y = rnorm(100))

scatter_fun(df, x, y, "x", "y", "my labels")

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62957548

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档