“ 量變學(xué)習(xí),,過程深思,總結(jié)完善,,突破創(chuàng)新,。” --科白君"R分享實(shí)戰(zhàn)"專刊·第11篇 眾所周知,,與Python相比,,R語言更擅長(zhǎng)繪圖。ggplot2作為R語言繪圖最精彩的包,,相信大家也有所耳聞,。相比于plot函數(shù),ggplot函數(shù)更適合新手學(xué)習(xí),。ggplot不僅可以滿足大家的繪圖需求,,而且可以描繪各式各樣優(yōu)美的圖形。然而,,ggplot的學(xué)習(xí)對(duì)不少小白來說仍有一定難度,。實(shí)際上,ggplot描繪不同圖形的畫圖思路是一致的,,只要掌握了所繪圖形所需要用的參數(shù)和函數(shù),,再利用"套路思維"完成即可。這里給大家做了簡(jiǎn)單的總結(jié),,同時(shí)以柱狀圖/條形圖為例,,與大家分享繪圖邏輯。首先推薦一個(gè)網(wǎng)址:The R Graph Gallery – Help and inspiration for R charts (r-graph-gallery.com)下圖是該網(wǎng)址的主頁(yè),,包括大約50種圖及其對(duì)應(yīng)代碼,,大家可以收藏學(xué)習(xí)。同時(shí),,網(wǎng)站的所有代碼都可以復(fù)現(xiàn),,相信這能給大家在繪圖時(shí)提供了一定幫助。與base包中plot函數(shù)相比,,ggplot2包中g(shù)gplot函數(shù)作圖是規(guī)律可循的,。首先,,ggplot作圖結(jié)果滿足期刊出版(可繪制高質(zhì)量高分辨率的圖);其次,,既可繪制常見種類的圖形,,也可將不同圖形種類組合在一起,或者設(shè)計(jì)新穎的圖形,。而plot函數(shù)對(duì)于新手來說相對(duì)較難,,也不太支持設(shè)計(jì)新穎圖形等。ggplot的繪圖邏輯有點(diǎn)像ps,,為什么這么說? 因?yàn)間gplot的繪圖時(shí)存在類"圖層"概念,。首先,將基礎(chǔ)的圖形先鋪墊好,,然后往上一層一層疊加圖層,,直至滿足需求。所以使用ggplot函數(shù)繪圖時(shí)需要用到大量的加號(hào)"+",,這是ggplot繪圖的底層邏輯,。因此,想繪圖及美化一張圖,,就需要針對(duì)圖中不同元素的函數(shù)和參數(shù)進(jìn)行學(xué)習(xí),。數(shù)據(jù)(data):可視化的數(shù)據(jù) 映射(mapping):數(shù)據(jù)的變量幾何對(duì)象(geom):如point散點(diǎn)圖等標(biāo)度(scale):變量以什么形狀、顏色映射到圖形中統(tǒng)計(jì)變換(stats):對(duì)數(shù)據(jù)計(jì)算分面(facet):根據(jù)數(shù)據(jù)變量拆開,,分層畫圖主題(theme):根據(jù)需求對(duì)圖進(jìn)行"精雕細(xì)琢"注釋 (annotate): 對(duì)圖形增加文字類的注釋 ggplot ()圖層包括數(shù)據(jù)和映射,。這是畫圖的基礎(chǔ),正如立個(gè)背景(畫布),。例如,,ggplot (data = xx, mapping = aes(x, y) 等等 (3) 第二層:geom_xx () 圖層 該圖層主要繪制所需圖形類型,當(dāng)ggplot () 描述了data和mapping后,,geom這層就可以不用再寫這部分內(nèi)容,,直接描述例如該圖形的形狀、大小,、顏色等等,。常見包括以下圖形: geom_point () 散點(diǎn)圖 geom_bar () 柱狀圖 geom_line () 折線圖 geom_boxplot () 箱線圖 geom_violin () 小提琴圖 geom_histogram () 直方圖 其實(shí),繪圖到這兩層已經(jīng)把圖畫出來了,。后續(xù)的其他元素,,是根據(jù)自己的需求不斷的完善和美化。這里就不再一一贅述了,,我用一個(gè)柱狀圖的例子來展示ggplot2的魅力,。考慮到散點(diǎn)圖前幾期已經(jīng)與大家分享過,,就挑選一個(gè)常見的圖形(柱狀圖/條形圖)作為例子給大家講講繪圖思路,。根據(jù)上面描述的基本元素,,我們一步一步繪制: 第一、二層:包含數(shù)據(jù)data 映射mapping 幾何對(duì)象geom library(ggplot2) #加載R包 data("mtcars") #自帶數(shù)據(jù)集 head(mtcars) #查看該數(shù)據(jù)集前6行 ggplot(data=mtcars, aes(x = as.factor(cyl), y = mpg))+ geom_bar(stat = "identity") #ggplot() 先描述數(shù)據(jù)對(duì)象,,然后映射數(shù)據(jù)中x 和 y的對(duì)應(yīng)變量,。 #geom_bar() 畫柱狀圖。如果設(shè)置stat="identity",,這意味著條形的高度表示數(shù)據(jù)數(shù)據(jù)的值,,而數(shù)據(jù)的值是由aes ()函數(shù)的y參數(shù)決定的,就是說,,把值映射到y(tǒng),,所以,當(dāng)設(shè)置stat="identity"時(shí),,必須設(shè)置映射函數(shù)中的y參數(shù),,把它映射到數(shù)值變量。 結(jié)果如圖: 這里強(qiáng)調(diào)一點(diǎn):大家可以看到設(shè)定x對(duì)象為cyl,,用了as.factor()函數(shù),,這表示將4,6,8作為三個(gè)因子。如果我們直接用x=cyl將是另一個(gè)結(jié)果,,因?yàn)閏yl的具體結(jié)果為數(shù)值型數(shù)據(jù),。因此,當(dāng)遇到數(shù)值型作為x軸時(shí),,大家需要考慮清楚是否需要將其轉(zhuǎn)化為因子型,。
后續(xù)圖層的代碼講解如下:包含標(biāo)尺scale 分面facet 主題theme,其余的代碼學(xué)習(xí)邏輯與這幾個(gè)元素一樣,。 最主要對(duì)不懂的函數(shù)尋求幫助,,最重要的事情說三遍:看對(duì)應(yīng)help中examples,看對(duì)應(yīng)help中的examples,,看對(duì)應(yīng)help中的examples,。 ggplot(data=mtcars, aes(x = as.factor(cyl), y = disp, fill = as.factor(gear)))+ #fill這里是對(duì)gear這個(gè)變量進(jìn)行分組,如果不用as.factor函數(shù),,則顏色會(huì)根據(jù)數(shù)值的變化展現(xiàn)出漸進(jìn)色變化,。 geom_bar(stat = "identity")+ scale_y_continuous(limits = c(0,500))+ #對(duì)y軸進(jìn)行范圍設(shè)定 facet_grid(~gear)+ #根據(jù)gear進(jìn)行分面 命令寫法為~xx theme_bw()+ #將灰色背景設(shè)置為白色 theme(legend.title = element_blank())+ #去掉圖例的標(biāo)題 element_blank 表示空白 labs(x="cyl") #對(duì)x軸標(biāo)題進(jìn)行修改 結(jié)果如圖:
這是對(duì)gear不設(shè)定as.factor,結(jié)果差異非常明顯,。
作者嘮叨:經(jīng)過簡(jiǎn)單的總結(jié),,希望能給大家利用ggplot2繪圖時(shí)提供幫助。最重要的是:需要大家保持一個(gè)繪圖思路/邏輯,,ggplot2就是一層又一層的覆蓋,,最終形成一張讓人賞心悅目的圖。如果大家遇到問題歡迎留言~R語言實(shí)戰(zhàn)(第三版):主要完善了優(yōu)化繪圖等內(nèi)容歡迎大家進(jìn)群學(xué)習(xí)和交流R語言問題~
|