1

我正在尝试创建一个使用包绘制三元图的自定义函数ggtern

这是数据和功能的示例

library(tidyverse)
library(ggtern)

myData <- tibble(T_x = c(0.461, 0.778, 0.429),
             T_y = c(0.126, 0.108, 0.404),
             T_z = c(0.413, 0.114, 0.167))

drawTriad <- function(df, x, y, z) {
  x <- enquo(x)
  y <- enquo(y)
  z <- enquo(z)
  df %>% 
    ggtern::ggtern(aes(!!x,
                       !!y,
                       !!z)) +
    geom_point(size = 2, color = "blue") +
    theme_void() + 
    theme_hidelabels() +
    theme(tern.axis.line = element_line(color='darkgray',size=1.5))
}

当我像这样在 myData 上运行该函数时:

drawTriad(myData, T_x, T_y, T_z)

我收到以下错误:FUN 中的错误(X[[i]],...):找不到对象“x”

我怎样才能让这个简单的功能发挥作用?

4

1 回答 1

2

几个选项...

library(ggplot2)
library(magrittr)
library(tibble)
library(ggtern)

选项1

这更简单:只需重命名源数据框或 tibble 中的变量以适应 ggtern,这避免了点坐标的程序变量问题。

drawTriad <- function(df) {
  df %>% 
    ggtern::ggtern(aes(x, y, z)) +
    geom_point(size = 2, color = "blue") +
    theme_void() + 
    theme_hidelabels() +
    theme(tern.axis.line = element_line(color='darkgray',size=1.5))
}

drawTriad(myData)

选项 2

这是基于 ggplot2:用于数据分析的优雅图形https://ggplot2-book.org/programming.html中给出的解释。并匹配问题中提出的问题。

drawTriad <- function(df, x, y, z) {

  df %>% 
    ggtern::ggtern(aes_(x = as.name(x), y = as.name(y), z = as.name(z))) +
    geom_point(size = 2, color = "blue") +
    theme_void() + 
    theme_hidelabels() +
    theme(tern.axis.line = element_line(color='darkgray',size=1.5))
}

drawTriad(df = myData,
          x = "T_x",
          y = "T_y",
          z = "T_z")

reprex 包于 2021-12-13 创建(v2.0.1)

于 2021-12-13T08:30:08.223 回答