【问题标题】:How to set ggplot x-label equal to variable name during lapply?如何在 lapply 期间将 ggplot x-label 设置为等于变量名?
【发布时间】:2018-10-01 06:09:37
【问题描述】:

我正在绘制一个 y 变量与多个 x 变量的图。 我有一个使用 lapply 的工作解决方案。但是,我无法将 x 变量的名称写为每个图的 x 标签。这是我所拥有的一个简化示例:

目标是将 y 变量与每个 x 变量绘制成三个图,并将每个 x 变量的名称添加为 x 轴标签。

用一个 y 变量和三个 x 变量生成一个数据框:

df <- data.frame(y.variable=c(11:20), x1=c(21:30),x2=c(1:10),x3=c(31:40))

一个应该将变量名作为字符串检索的函数:

get_name <- function(v1) {deparse(substitute(v1))}

生成 y 对 x 变量的绘图的函数:

generate_plot <- function(x.variable) {ggplot(data = df, aes(x.variable, y.variable )) +geom_point()  + xlab(get_name(variable.name))}

调用 lapply 对 df 的每一列执行 generate_plot:

lapply(df, generate_plot)

这会产生三个图,每个图都有“variable.x”作为其 x 标签,而不是所需的变量名称 x1、x2 和 x3。

【问题讨论】:

标签: r ggplot2 lapply tidyeval nse


【解决方案1】:

我稍微修改一下你的generate_plot,使用支持tidy evaluationggplot2&gt; v3.0.0)版本

解释:

  • 在函数内部,我们使用rlang::sym将字符串转换为符号,然后unquoteaes内部使用!!(砰砰)

  • 要调用该函数,请使用purrr::map 循环遍历df 列名

查看更多:

library(tidyverse)

df <- data.frame(y.variable=c(11:20), 
                 x1=c(21:30), x2=c(1:10), x3=c(31:40))

generate_plot2 <- function(df, x.variable) {
  x.variable <- rlang::sym(x.variable)

  ggplot(data = df, aes(!! x.variable, y.variable )) +
    geom_point() + 
    xlab(x.variable)
}

names(df)[-1] %>% 
  map(~ generate_plot2(df, .x))

reprex package (v0.2.0) 于 2018 年 4 月 20 日创建。

【讨论】:

  • 您好,首先感谢您的帮助!我想我了解 rlang::sym 和 !!在 aes。不幸的是,我无法通过复制粘贴您提供的代码来重现下图中的图表。我收到以下错误:“!x.variable 中的错误:无效的参数类型”
  • 你需要ggplot2的开发版。请参阅我的答案中的那行代码。安装前请务必重启R
  • 你是对的。我没有安装ggp​​lot2的开发版。现在就像一个魅力......谢谢!
猜你喜欢
  • 1970-01-01
  • 2022-11-15
  • 2018-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
  • 2022-01-20
  • 2011-09-02
相关资源
最近更新 更多