使用列名中带有特殊字符的 aes_ 或 aes_string 使用 ggplot 进行编程

Posted

技术标签:

【中文标题】使用列名中带有特殊字符的 aes_ 或 aes_string 使用 ggplot 进行编程【英文标题】:programming with ggplot using aes_ or aes_string with special characters in column names 【发布时间】: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 【参考方案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 - 不知道为什么你有这样的复杂列名称而不是标准名称。

【讨论】:

以上是关于使用列名中带有特殊字符的 aes_ 或 aes_string 使用 ggplot 进行编程的主要内容,如果未能解决你的问题,请参考以下文章

文件中带有数字的列名并创建配置单元表

名称中带有空格的 SQLite 列

http、https请求URL中带有&等特殊字符的解决方法

通过存储在 Postgresql 中带有特殊字符的变量名中来删除约束

如何选择 ID 中带有特殊字符的元素?

J2ME Nokia 中带有特殊字符的呼叫号码