2017-05-07 55 views
0

我想在循環中創建幾個圖(使用ggplot2),我正在使用下面的函數。如何在函數參數中設置ggplot參數

我使用的數據設置光圈和增加了一個叫做「ran_fact隨機因子變量,因此該數據集現在已經四個數字變量和兩個因素(種類和ran_fac)。

在循環穿過的那一刻數值變量併爲每個變量創建一個圖形,這兩個因子變量是在循環內部手動設置的(如圖中的x軸和顏色),這使得它變得更加通用,我想知道是否可以設置x軸,軸和顏色選項作爲函數參數,如果是的話可以怎麼做?

提前致謝。

另外,作爲一個側面問題,低於select_if(x, is.numeric)似乎不會從數據集中刪除因子變量。

library(datasets) 
library(dplyr) 
library(ggplot2) 
library(beeswarm) 

data(iris) 
iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E")) 

plotFunc <- function(x, na.rm = TRUE,...) { 
    plot_list = list() 
    nm <- select_if(x, is.numeric) 
    nm <- names(x) 
    for (i in seq_along(nm)) { 
     plots <-ggplot(x,aes_string("ran_fac", nm[i], color="Species")) + geom_quasirandom() + geom_boxplot() 
     plot_list[[i]] = plots 
     print(plots) 
     ggsave(plots,filename=paste("myplot",nm[i],".png",sep="")) 
    } 
} 

plotFunc(iris) 

Beeswarm plot

+0

請正確縮進您的代碼。我爲你修好了。 –

+0

如果您可以更清楚地瞭解期望的輸出是什麼,這將有所幫助。你想如何調用這個函數,你想得到什麼結果? – MrFlick

+0

「select_if(is.numeric)'返回因子的例子在哪裏?如果我運行sapply(虹膜,類)'我看到Species是一個因素,如果我運行'名稱(dplyr :: select_if(iris,is.numeric))'它不會被返回。 – MrFlick

回答

0

好吧,我發現我的答案在這個問題上Passing arguments to ggplot in a wrapper。我調整了我的功能,並按照預期工作。現在我可以在開始時設置x軸和顏色。

library(datasets) 
library(dplyr) 
library(ggplot2) 

data(iris) 

iris$ran_fac <- as.factor(c("A", "B", "C", "D", "E")) 

xcol <- iris$ran_fac 
colorVar <- iris$Species 

plotFunc <- function(data, na.rm = TRUE, x, color,...) { 
    plot_list = list() 
    nm <- select_if(data, is.numeric) 
    nm <- names(nm) 
    for (i in seq_along(nm)) { 
    plots <- ggplot(data = data, aes_string(x = "xcol", nm[i], color = "colorVar")) + geom_quasirandom() + geom_boxplot() 
    plot_list[[i]] = plots 
    print(plots) 
    ggsave(plots, filename = paste("myplot", nm[i],".png", sep="")) 

    } 
} 

plotFunc(iris)