[英]ggplot2 - passing dataframe with column names
我查看了其他解決方案,但無法在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
旨在以“綠色”繪制上方(yaxis)0的點,以“紅色”繪制下方的點。 雖然我能夠使字符串名稱正確顯示在軸上,但我卻無法使邏輯正常工作。
請幫忙。
由於您要為此創建自己的函數,因此只需提前計算所需的顏色即可。 由於要傳遞數據框和變量,因此需要使用一些標准評估(已經使用aes_string
進行了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")
導致:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.