在ggplot2函数中访问轴标签的变量属性信息

克里斯托弗·米肖

我正在寻找增加大型数据集数据效率的方法。为此,我使用ggplot2创建了几个函数。由此产生的一些数字可能是用于分发的,因此,我希望它们具有易于理解的标题和轴标签。我在想我可以使用将标签关联到每个变量attr()这样,我不必重命名变量并处理包含空格的长变量名使用ggplot的函数时,我已成功完成此任务

library(ggplot2)
library(magrittr)

# Set attributes
mt <- mtcars
attr(mt$mpg, "desc") <- "Miles per Gallon"   
attr(mt$cyl, "desc") <- "Number of Cylinders"


mt %>% 
  ggplot() +
  geom_point(aes(x = cyl, y = mpg)) +
  labs(x = attr(mt$cyl, "desc"),
       y = attr(mt$mpg, "desc"))

上面的代码行为符合我的期望,并返回包含轴标签的图形。但是,当我创建图形功能时,我无法弄清楚如何访问变量属性。以下两个尝试均成功创建了图形,但是未生成轴标签

vis_1 <- function(.data, .x, .y) {
  .data %>% 
    ggplot() + 
    geom_point(aes(x = {{.x}}, y = {{.y}})) +
    labs(x = attr({{.data$.x}}, "desc"),
         y = attr({{.data$.y}}, "desc"))
}

vis_1(.data = mt, .x = cyl, .y = mpg)

vis_2 <- function(.data, .x, .y) {
  attr_x <- attr(.data$.x, "desc")
  attr_y <- attr(.data$.y, "desc")
  
  .data %>% 
    ggplot() + 
    geom_point(aes(x = {{.x}}, y = {{.y}})) +
    labs(x = attr_x,
         y = attr_y)
}

vis_2(.data = mt, .x = cyl, .y = mpg)

任何建议,将不胜感激。

尼洛克

这里的问题是引用您传递的变量。

如果您愿意使用cylmpg作为引用变量,则是一种选择中的基本[子集attr可以正常工作,ggplot您可以使用!!sym()

vis_2 <- function(df, x, y) {
  
  attr_x <- attr(df[,x], "desc")
  attr_y <- attr(df[,y], "desc")
  
  df %>% 
    ggplot() + 
    geom_point(aes(!!sym(x), !!sym(y))) +
    labs(x = attr_x,
         y = attr_y)
}

vis_2(mt, 'cyl', 'mpg')

传递未加引号的变量的版本。此解决方案deparse(substitute(x))用于[呼叫中和!!enquo(x)用于中ggplot


vis_3 <- function(df, x, y) {
  
  # base quoting
  x_sub <- deparse(substitute(x))
  y_sub <- deparse(substitute(y))
  
  attr_x <- attr(df[,x_sub], "desc")
  attr_y <- attr(df[,y_sub], "desc")
  
  df %>% 
    ggplot() + 
    geom_point(aes(!!enquo(x), !!enquo(y))) +
    labs(x = attr_x,
         y = attr_y)
}


vis_3(mt, cyl, mpg)

另一个版本使用了无引号的变量,该版本使用{{forggplotdeparse(ensym()for [

vis_4 <- function(df, x, y) {
  
  attr_x <- attr(df[,deparse(ensym(x))], "desc")
  attr_y <- attr(df[,deparse(ensym(y))], "desc")
  
  df %>% 
    ggplot() + 
    geom_point(aes({{x}}, {{y}})) +
    labs(x = attr_x,
         y = attr_y)
}


vis_4(mt, cyl, mpg)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ggplot2中的轴标签交错

来自分类Dev

如何使用ggplot2在轴标签中同时使用上标和变量

来自分类Dev

ggplot2中X轴变量标签上的真减号

来自分类Dev

如何从ggplot2中的两个分类变量创建x轴标签?

来自分类Dev

交错轴标签,ggplot2中的新功能

来自分类Dev

ggplot2中x轴的顺序标签跟随数值

来自分类Dev

ggplot2中x轴的顺序标签跟随数值

来自分类Dev

ggplot2函数中的变量

来自分类Dev

如何在R ggplot2中使用多个变量旋转标签轴的一部分

来自分类Dev

ggplot2交错轴标签

来自分类Dev

R 和 ggplot2 - 如何动态隐藏轴变量标签

来自分类Dev

在ggplot函数中访问变量

来自分类Dev

在ggplot函数中访问变量

来自分类Dev

中断ggplot2中的Y轴

来自分类Dev

ggplot2中的x轴格式

来自分类Dev

ggplot2中的分割轴图

来自分类Dev

ggplot2中的x轴格式

来自分类Dev

ggplot2中的日志轴标签:没有逗号的完整编号?

来自分类Dev

根据条件更改ggplot2中某些轴标签的格式

来自分类Dev

标签的旋转是否遵循ggplot2中的x轴,极性投影?

来自分类Dev

如何在ggplot2中使用重复的x轴标签绘制折线图

来自分类Dev

使用ggplot2更改R中的x轴刻度标签

来自分类Dev

如何更改ggplot2中轴标签上的小数位数?

来自分类Dev

修改ggplot2中的轴颜色标签时出现问题

来自分类Dev

在ggplot2中动态格式化单个轴标签

来自分类Dev

如何在ggplot2中使用coord_polar移动x轴标签

来自分类Dev

如何将图例向上移动到ggplot2中的x轴标签

来自分类Dev

如何在ggplot2中的方面之间强制使用常见的x轴标签/限制?

来自分类Dev

ggplot2:facet_grid中x轴标签的条件格式