ggplot2 - 使用列名传递数据帧

时间:2016-12-27 17:11:01

标签: r ggplot2

我查看了其他解决方案,但无法在ggplot中获得正确的工作原理。我有以下功能。数据帧与两个一起传递 要绘制为散点图的列。

scatter_plot2 <- function(df, xaxis, yaxis){
       b <- ggplot(data = df, aes_string(xaxis, yaxis), environment = environment())
       gtype <- geom_point(aes(alpha = 0.2, color = yaxis > 0)) 
       sm <- geom_smooth(formula = xaxis ~ yaxis, color="black")
       b + gtype + sm + theme_bw() 
    }

我打电话使用:

scatter_plot2(train_df, "train_df$signal", "train_df$yhat5")

===

color = yaxis > 0

用于在“绿色”中绘制上方(y轴)0的点,在“红色”中绘制下面的点。虽然我能够在轴上正确显示字符串名称,但我无法使逻辑正常工作。

请帮忙。

1 个答案:

答案 0 :(得分:1)

由于您正在为此创建自己的功能,因此请提前计算所需的颜色。由于您要传递数据框和变量,因此您需要使用一些标准评估(您已使用aes_string执行此操作)。

我稍微清理了代码,将ggplot语句放入单个链中,使一些aes调用显式,并使您的平滑公式y~x。传入变量时,您也不想使用$,只需传递引号即可。

library(dplyr)
library(ggplot2)

scatter_plot2 <- function(df, xaxis, yaxis){

  df <- mutate_(df, color = ~ifelse(yaxis > 0, "green", "red"))

  ggplot(data = df, aes_string(x = xaxis, y = yaxis)) +
      geom_point(aes(alpha = 0.2, color = color)) +
      geom_smooth(formula = y ~ x, color =" black") +
      scale_color_identity() +
      theme_bw() 
}

调用将是(使用iris作为示例):

scatter_plot2(iris, "Sepal.Width", "Sepal.Length")

导致:

enter image description here