2016-12-27 95 views
0

我看着其他解决方案,但不能得到ggplot内的逻辑正常工作。我有以下功能。将数据帧与两个 列一起传递以作为散点图进行绘制。ggplot2 - 传递数据帧与列名称

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

由于您正在为此创建自己的功能,只需提前计算所需的颜色。由于您传递的是数据框和变量,因此您需要使用一些标准评估(您已使用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

+0

谢谢!谢谢!谢谢!! –

相关问题