用par設(shè)置ggplot2參數(shù)豹障?這個(gè)可以有!

有小伙伴在說可以用par(mar)來設(shè)置畫圖的margin焦匈,但不能應(yīng)用于ggplot2血公,這個(gè)可能很多新手都會(huì)很困擾,可能需要一段時(shí)間的探索之后缓熟,才能發(fā)現(xiàn)原來是用theme來設(shè)定累魔。

這當(dāng)然你可以歸結(jié)于說ggplot2和base plot是不同的東西,但從實(shí)質(zhì)畫圖參數(shù)這一點(diǎn)而言够滑,并沒有什么同與不同垦写,無非是設(shè)置的方式不同而已,而這種方式都是人定義的彰触,我們完全可以人為定義它們兼容梯投。

image

這里我用了一個(gè)ggpar的函數(shù),我們傳入mar=rep(6,4)况毅,就像我們用par一樣分蓖,而這個(gè)ggpar它事實(shí)上就設(shè)置了par,所以我畫第一張圖尔许,用base plot么鹤,我們發(fā)現(xiàn)margin已經(jīng)按照我們的設(shè)定分配了。

然后我打開另一個(gè)畫圖窗口母债,再用ggplot2畫午磁,我們發(fā)現(xiàn)咦ggplot2也認(rèn)這個(gè)參數(shù),margin也設(shè)置好了毡们。當(dāng)然細(xì)心的你可能發(fā)現(xiàn)ggplot2的畫圖區(qū)域更小迅皇,這是base plot和ggplot2對(duì)margin的定義不同的緣故,base plot的margin是畫圖框外面的區(qū)域衙熔,而ggplot2的margin是畫圖內(nèi)容之外的區(qū)域登颓,像axis text和label都在畫圖區(qū)域之內(nèi),這樣你再對(duì)比右邊的兩張圖,你就會(huì)發(fā)現(xiàn)margin果然是一致的红氯,ggpar果然同時(shí)改變了base plot和ggplot2的默認(rèn)設(shè)置框咙。

然后我再改變ggplot2的主題,再打開一個(gè)畫圖窗口痢甘,然后再設(shè)置ggpar喇嘱,證明ggpar可以應(yīng)用于ggplot2當(dāng)前的任何主題。畫出了圖中代碼下面的圖塞栅。

就是這么神奇者铜!你只要能夠深入了解,很多東西就不是不可以放椰,而是可能作烟,以及該如何實(shí)現(xiàn)。

產(chǎn)生上面圖的代碼如下:

library(yyplot2)
ggpar(mar=rep(6,4))
d=data.frame(x=rnorm(10), y=rnorm(10))
plot(d$x, d$y)
X11()
ggplot(d, aes(x,y)) + geom_point() 
theme_set(theme_minimal())
X11()
ggpar(mar=rep(1,4))
ggplot(d, aes(x,y)) + geom_point() 

到上面為止砾医,已經(jīng)讓人掉下巴了拿撩,但不夠完美,因?yàn)樗肓艘粋€(gè)新函數(shù)如蚜!這簡(jiǎn)直是廢話压恒,因?yàn)闆]有新函數(shù)的引入就沒有這個(gè)可以兼容彼此的功能。能不能不要搞多個(gè)函數(shù)错邦?我早上醒來的時(shí)候這樣問自己涎显,并且跟自己說做為男人不能說不行!(這可咋整兴猩?請(qǐng)思考3分鐘再往下看)


ggpar必須要有期吓,不然沒這功能,你需要用ggpar來設(shè)置倾芝,或者你不帶參數(shù)單獨(dú)跑ggpar()讨勤,它會(huì)去獲取你已經(jīng)設(shè)置或者沒有設(shè)置(默認(rèn)值)的par參數(shù)。再者你用theme_set換默認(rèn)主題時(shí)晨另,你需要再跑ggpar()去追加par的設(shè)置到默認(rèn)主題中潭千,這合情合理,也就每次多跑一下ggpar()借尿,讓彼此兼容刨晴!

image

但能不能讓它存在于無形之中屉来?也就是說我還像往常一樣,用了par()來設(shè)置狈癞,然后ggplot2也認(rèn)茄靠,而我用theme_set設(shè)置主題的時(shí)候,也不需要跑ggpar去追加par設(shè)置蝶桶。這聽起來特別美好慨绳!

要實(shí)現(xiàn)其實(shí)也不難,就是重置函數(shù)真竖,我們把R的par函數(shù)給換掉脐雪,你par還是你par,該干的話照干恢共,你par已經(jīng)不是你par战秋,它還跑了ggpar.

par = function(...) { graphics:::par(...); ggpar()}

一句話的事情,然后你用par讨韭,ggplot2就認(rèn)了获询。

image
theme_set = function(...) {ggplot2::theme_set(...); yyplot::ggpar()}

theme_set也是一樣,當(dāng)你換主題的時(shí)候拐袜,自動(dòng)追加par的設(shè)置吉嚣。

image

什么叫存在于無形之中?你不是也得重定義partheme_set函數(shù)嘛蹬铺,如果你能這樣問我尝哆?我給你點(diǎn)個(gè)贊,我們?cè)侔堰@兩個(gè)簡(jiǎn)單的函數(shù)放在.Rprofile中甜攀,這樣你每次打開R秋泄,這兩個(gè)函數(shù)就被定義了,而你啥都沒有干规阀!然后你用的par恒序,該怎么用還怎么用,但是ggplot2認(rèn)你的設(shè)置谁撼,你用theme_set換主題歧胁,會(huì)自己追加par設(shè)置,你啥額外的事情都不用干@鞯:拔 !這就叫存在于無形中箍鼓,這就叫完全兼容崭参。

這個(gè)ggpar函數(shù)我放在yyplot包中,只是給大家開個(gè)眼界款咖,是知識(shí)限制了我們的想像力何暮。目前版本只適用于設(shè)置margin奄喂,其它一些參數(shù)也是可以的,大家有興趣可以去github上fork海洼,或者我以后在實(shí)踐中覺得有必要搞(因?yàn)榭梢宰屧O(shè)置ggplot2默認(rèn)主題參數(shù)變得容易)跨新,再繼續(xù)搞吧。目前只是拋磚引玉贰军,放飛大家的想像力玻蝌。

這個(gè)需求可能還是比較大的蟹肘,畢竟ggplot2的設(shè)置還是比較困難的词疼,而且R新手多半是有學(xué)base plot的,會(huì)讓主題設(shè)置變得非常容易帘腹。

值得重溫的yyplot系列

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舵盈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子球化,更是在濱河造成了極大的恐慌秽晚,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件筒愚,死亡現(xiàn)場(chǎng)離奇詭異赴蝇,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)巢掺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門句伶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陆淀,你說我怎么就攤上這事考余。” “怎么了轧苫?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵楚堤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我含懊,道長(zhǎng)钾军,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任绢要,我火速辦了婚禮吏恭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘重罪。我一直安慰自己樱哼,他們只是感情好哀九,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搅幅,像睡著了一般阅束。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上茄唐,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天息裸,我揣著相機(jī)與錄音,去河邊找鬼沪编。 笑死呼盆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蚁廓。 我是一名探鬼主播访圃,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼相嵌!你這毒婦竟也來了腿时?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤饭宾,失蹤者是張志新(化名)和其女友劉穎批糟,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體看铆,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徽鼎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了性湿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纬傲。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖肤频,靈堂內(nèi)的尸體忽然破棺而出叹括,到底是詐尸還是另有隱情,我是刑警寧澤宵荒,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布汁雷,位于F島的核電站,受9級(jí)特大地震影響报咳,放射性物質(zhì)發(fā)生泄漏侠讯。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一暑刃、第九天 我趴在偏房一處隱蔽的房頂上張望厢漩。 院中可真熱鬧,春花似錦岩臣、人聲如沸溜嗜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽炸宵。三九已至辟躏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間土全,已是汗流浹背捎琐。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留裹匙,地道東北人瑞凑。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像幻件,于是被迫代替她去往敵國(guó)和親拨黔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蛔溃,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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

  • 以三個(gè)數(shù)據(jù)集解釋ggplot2的使用绰沥。第一個(gè)是lattice包中的singer數(shù)據(jù)集,它包括紐約合唱團(tuán)歌手的高度和...
    王詩(shī)翔閱讀 17,962評(píng)論 8 54
  • 今天成功完成第二輪充電行動(dòng)贺待,又一個(gè)完成徽曲。昨晚寫的文章不怎么滿意,不想分享了麸塞,改了改想了一下才有勇氣把文章分...
    拜泉0851劉冬梅閱讀 179評(píng)論 0 2
  • 作為一只外地狗秃臣,終于悲慘地發(fā)現(xiàn),在哪都沒有家哪工,哪兒都不是家了奥此。 父母那,因?yàn)樽x書加工作原因雁比,甚至現(xiàn)在快要在異地安家...
    臺(tái)燈上的黃夾子閱讀 280評(píng)論 0 1
  • 這個(gè)詞是我這幾年來經(jīng)常掛在嘴邊的一個(gè)詞稚虎。 以前的我不是這樣的,不知從哪天開始偎捎,我開始經(jīng)常把這個(gè)詞掛在了嘴邊蠢终。 也許...
    王麗燕199閱讀 520評(píng)論 0 4