ggplot2自定義函數(shù)方法

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)在生信太卷了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市省核,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌气忠,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吨娜,死亡現(xiàn)場離奇詭異,居然都是意外死亡萌壳,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門缤骨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绊起,你說我怎么就攤上這事∈幔” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵笋鄙,是天一觀的道長怪瓶。 經(jīng)常有香客問我,道長洗贰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任敛滋,我火速辦了婚禮,結(jié)果婚禮上绎晃,老公的妹妹穿的比我還像新娘。我一直安慰自己庶艾,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布泌霍。 她就那樣靜靜地躺著,像睡著了一般朱转。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上藤为,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天夺刑,我揣著相機與錄音分别,去河邊找鬼。 笑死耘斩,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的括授。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼荚虚,長吁一口氣:“原來是場噩夢啊……” “哼籍茧!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寞冯,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎简十,沒想到半個月后撬腾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡胰默,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年漓踢,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片喧半。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挺据,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情扁耐,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布婉称,位于F島的核電站构蹬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏庄敛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一铐姚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧隐绵,春花似錦、人聲如沸依许。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛀醉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間衅码,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工垛玻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人奶躯。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像账嚎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子儡蔓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內(nèi)容