R-在函数中将参数传递给ggplot

时间:2018-02-26 05:34:12

标签: r function ggplot2 arguments

如果我想要一个1-x x轴,我有一个关于如何将参数传递给ggplot的问题。该函数用于在数据框中指定列名。

假设我的数据框看起来像

x1    x2    x3   x4
0.1   0.2   0.3  0.4
0.3   0.5   0.7  0.9
0.4   0.6   0.8  0.2     

我有一个功能

myfunction<- function(x, y, convert = False){

if (flip) {
  ggplot(data = mydata, aes(x=1-get(x), y=get(y))) + geom_line() + 
  xlab(x) + ylab(y)
    } else {
  ggplot(data = mydata, aes(x=get(x), y=get(y))) + geom_line() + 
  xlab(x) + ylab(y)
    }
}

当convert = False时它可以工作,但如果我想绘制myfunction(x1, x2, convert = TRUE),我的x-lab仍然是"x1",而不是"1-x1"。我试图编写xlab(1-get(x))代码,但它不起作用。任何人都知道如何将x-label打印为"1-x1",其中x1是数据框中的列名?

1 个答案:

答案 0 :(得分:1)

根据函数参数,似乎convertflip。而不是使用get来修改&#39; x&#39;参数,我们可以在将参数转换为quosures

后使用mutate执行此操作
myfunction<- function(mydata, x, y, convert = FALSE){
    x <- enquo(x)
    y <- enquo(y)
    xnew <- quo_name(x)
if (convert) {
   mydata %>%
         mutate(!! (xnew) := 1- !!(x)) %>%
         ggplot(., aes_string(xnew, quo_name(y))) +
               geom_line() + 
               xlab(paste0("1 - ", xnew))

} else {

     ggplot(mydata, aes_string(xnew, quo_name(y))) +
             geom_line()

    }

}

myfunction(df1, x1, x2, convert = TRUE)

-output

enter image description here

myfunction(df1, x1, x2, convert = FALSE)

-output

enter image description here

数据

df1 <- structure(list(x1 = c(0.1, 0.3, 0.4), x2 = c(0.2, 0.5, 0.6), 
x3 = c(0.3, 0.7, 0.8), x4 = c(0.4, 0.9, 0.2)), .Names = c("x1", 
"x2", "x3", "x4"), class = "data.frame", row.names = c(NA, -3L
))