ggplot2自定義函數(shù)方法
前言:(百年更新,太懶了實在)最近寫R包和平常使用的時候夺欲,有的時候想快速畫一個自己定義好的圖跪帝,每一次都要一長串代碼,有點不是很方便些阅,于是想編寫一些畫圖函數(shù)伞剑,方便快速畫圖市埋。但是在編寫ggplot2自定義函數(shù)的時候碰到了一些問題,外部無法傳遞到ggplot2內(nèi)部中抒倚,如:
1.存在的問題
以iris數(shù)據(jù)集為示例,畫個散點圖為例:
##函數(shù)
testplot <- function(data, x, y, colour){
ggplot(data,aes(x=x, y=y, colour=colour))+
geom_point()
}
##調(diào)用
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
1.1 調(diào)用方式一
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
結(jié)果表明只有一個點托呕,明顯和要求不一樣1.2 調(diào)用方式二
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
報錯了因此本文介紹三種方法用于構(gòu)建ggplot2自定義
2.方法
2.1 利用ggplot2自帶aes_string()函數(shù)來實現(xiàn)
# 函數(shù)
testplot <- function(data, x, y, colour){
ggplot(data,aes_string(x=x, y=y, colour=colour))+
geom_point()
}
##調(diào)用
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
結(jié)果正常项郊,但是輸入的時候要加“ ”的列名2.2 利用生成變量賦值的方法
# 函數(shù)
testplot <- function(data, x, y, colour){
assign("x", data[,x]) ##將data中x列的值值賦給x變量,下面同理
assign("y", data[,y])
assign("colour", data[,colour])
ggplot(data,aes_string(x=x, y=y, colour=colour))+
geom_point()
}
##調(diào)用
testplot(iris, x="Sepal.Length", y="Sepal.Width", colour="Species")
有點麻煩差油,不如aes_string方便,但也可以實現(xiàn)厌殉,也是要用" "的列名2.3 利用rlang包的特性侈咕,用{{ }}實現(xiàn)ggplot2同等效果
##加載包
library(rlang)
# 函數(shù)
testplot <- function(data, x, y, colour){
ggplot(data,aes(x={{x}}, y={{y}}, colour={{colour}}))+
geom_point()
}
#調(diào)用
testplot(iris, x=Sepal.Length, y=Sepal.Width, colour=Species)
結(jié)論耀销,利用{{ }}實現(xiàn)ggplot2同等效果,輸入時候不用列名不用加引號熊尉,個人比較喜歡第三種,實際情況上1狰住,3我都有使用2.4 后續(xù)待補充齿梁,暫時夠用
終: 寫這個單純記錄一下過程,避免后面自己忘記了勺择。順便吐槽一下現(xiàn)在生信太卷了