我查看了其他解决方案,但无法在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的点,在“红色”中绘制下面的点。虽然我能够在轴上正确显示字符串名称,但我无法使逻辑正常工作。
请帮忙。
答案 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")
导致: