【问题标题】:programming with ggplot using aes_ or aes_string with special characters in column names使用列名中带有特殊字符的 aes_ 或 aes_string 使用 ggplot 进行编程
【发布时间】:2021-12-02 06:45:27
【问题描述】:

我需要在函数中运行 ggplot。传递给函数的输入 data.frame/tibble 在要绘制数据的列中具有特殊字符(空格、逗号等)。要绘制的列名作为参数传递给函数。这是一个工作示例, aes_ 和 aes_string 都失败了,但原因不同。帮助表示赞赏

trial.tbl_df <- tibble(a = 1:3, `complex, `=4:6)

plotfunc <- function(tbl2plot,yvar){

  ggplot(tbl2plot,aes_(x = "a", y = yvar )) + 
    geom_point()

}

plotfunc(tbl2plot = trial.tbl_df, yvar = `complex, `)

【问题讨论】:

  • 我使用的是 R 版本 4.1.1 和 ggplot2_3.3.5
  • 请注意aes_aes_stringggplot2 中都已被软性弃用,我建议您研究程序化准引用方法。寻找关于“整洁评估”的教程,例如dplyr.tidyverse.org/articles/programming.html

标签: r ggplot2 tidyverse aesthetics


【解决方案1】:

正如@r2evans 所述,您可以使用tidy evaluation,因为aes_aes_string 已被弃用:

trial.tbl_df <- tibble(a = 1:3, `complex, `=4:6)


plotfunc <- function(data, y){
  
  y <- enquo(y)

  ggplot(data, aes(x = a, y = !!y)) + 
    geom_point()
  
}

plotfunc(data = trial.tbl_df,  y = `complex, `)

【讨论】:

    【解决方案2】:

    使用aes_as.name怎么样:

    trial.tbl_df <- tibble(a = 1:3, `complex, `=4:6)
    
    plotfunc <- function(tbl2plot,yvar){
      
      ggplot(tbl2plot ,aes_(x = ~a, y = as.name(yvar))) + 
        geom_point()
      
    }
    
    plotfunc(tbl2plot = trial.tbl_df, yvar = "complex, ")
    

    【讨论】:

      【解决方案3】:

      aes_aes_string 都在您将列名作为字符串传递时使用。由于它们都已弃用,您可以使用.data

      library(ggplot2)
      
      trial.tbl_df <- tibble::tibble(a = 1:3, `complex, `=4:6)
      
      plotfunc <- function(tbl2plot,yvar){
        
        ggplot(tbl2plot,aes(x = a, y = .data[[yvar]])) + 
          geom_point()
        
      }
      
      plotfunc(tbl2plot = trial.tbl_df, yvar = "complex, ")
      

      PS - 不知道为什么你有这样的复杂列名称而不是标准名称。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-02
        • 2014-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多