簡體   English   中英

ggplot2-使用列名稱傳遞數據框

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM