使用列名中带有特殊字符的 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_string
在ggplot2
中都已被软性弃用,我建议您研究程序化准引用方法。寻找关于“整洁评估”的教程,例如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 进行编程的主要内容,如果未能解决你的问题,请参考以下文章