代码之家  ›  专栏  ›  技术社区  ›  conv3d

在AES_string()内缩放值

  •  1
  • conv3d  · 技术社区  · 6 年前

    在ggplot中,我想用y-var乘以一个数字,比如10来缩放y-var。问题是这是在一个闪亮的应用程序中,变量必须作为字符串传递,即。 input$variable .

    如何将其中一个变量乘以 aes_string() 就像我进去一样 aes() ?下面是一个失败的例子:

     library(ggplot2)
     ggplot(data = subset(mtcars, cyl == 4), aes_string(x = "wt", y = "mpg")) + 
          geom_line(size = 1.5, color = "#00868B") + 
          geom_line(data = subset(mtcars, cyl == 8), aes_string(x = "wt", y = "mpg" * 10))
    

    “mpg”*10中的错误:二进制运算符的非数值参数

    2 回复  |  直到 6 年前
        1
  •  2
  •   Tung    6 年前

    你可以使用 tidyeval 引入的方法 ggplot2 v3.0.0

    # install.packages("ggplot2", dependencies = TRUE)
    library(ggplot2)
    
    var1 <- "wt"
    var2 <- "mpg"
    multiplier <- 10
    
    ggplot(data = subset(mtcars, cyl == 4), 
           aes(x = !! rlang::sym(var1), y = !! rlang::sym(var2))) + 
      geom_line(size = 1.5, color = "#00868B") + 
      geom_line(data = subset(mtcars, cyl == 8), 
                aes(x = !! rlang::sym(var1), y = !! rlang::sym(var2) * multiplier))
    

    或者把一切都放在一个函数中

    plot_select_vars <- function(var1, var2, multiplier) {
    
      var1 <- rlang::sym(var1)
      var2 <- rlang::sym(var2)
    
      ggplot(data = subset(mtcars, cyl == 4), 
             aes(x = !! var1, y = !! var2)) + 
        geom_line(size = 1.5, color = "#00868B") + 
        geom_line(data = subset(mtcars, cyl == 8), 
                  aes(x = !! var1, y = !! var2 * multiplier))
    
    }
    
    plot_select_vars(var1, var2, multiplier)
    

    于2018-06-06由 reprex package (b)。

        2
  •  2
  •   pogibas    6 年前

    我更喜欢用 get 而不是 aes_string 调用内部变量 ggplot2 它可以进行值修改,例如:

    library(ggplot2)
    X <- "wt"
    Y <- "mpg"
    ggplot(subset(mtcars, cyl == 4), aes(get(X), get(Y))) + 
        geom_line() + 
        geom_line(data = subset(mtcars, cyl == 8), aes(y = get(Y) * 10)) +
        labs(x = X,
             y = Y)
    

    enter image description here

    你不需要打电话 wt 在第二 aes 因为它和第一个一样是“变量” 俄歇电子能谱 .

    推荐文章