全棧 - 14 ggplot2 基本語法和基礎(chǔ)圖形

這是全棧數(shù)據(jù)工程師養(yǎng)成攻略系列教程的第十四期:14 ggplot2 基本語法和基礎(chǔ)圖形沿癞。

上一節(jié)我們掌握了R的使用并安裝了ggplot2,這一節(jié)讓我們了解下ggplot2的基本語法以及一些常見圖形的繪制方法者祖。

圖形種類

數(shù)據(jù)可視化使用形狀缴川、色彩厕诡、大小党远、透明度等視覺元素來表達數(shù)據(jù)削解,從而實現(xiàn)更直觀生動的展示效果。常見的圖形包括散點圖沟娱、折線圖氛驮、條形圖、直方圖济似、箱線圖矫废、密度圖等盏缤,它們都反映了兩個變量之間的關(guān)系,但表現(xiàn)的角度和場景都有所不同蓖扑。

  • 散點圖反映的是兩個連續(xù)變量之間的關(guān)系唉铜,例如一群人的身高和體重;
  • 折線圖反映的是一個連續(xù)變量隨另一個連續(xù)變量的變化關(guān)系律杠,例如一只股票的股價隨時間的波動情況打毛;
  • 條形圖反映的是一個連續(xù)變量在另一個離散變量不同水平下的值,例如不同年齡層的平均收入俩功;
  • 直方圖反映的是一個連續(xù)變量在另一個連續(xù)變量不同區(qū)間范圍下的值,例如一群人中身高處于各個區(qū)間段的人數(shù)碰声;
  • 箱線圖反映的是一個連續(xù)變量在另一個離散變量不同水平下的分布诡蜓,例如不同學(xué)歷人群的收入分布;
  • 密度圖反映的是一個連續(xù)變量在另一個連續(xù)變量不同取值下的概率密度胰挑,例如不同收入人群所對應(yīng)的密度蔓罚。

總的來說,需要結(jié)合實際應(yīng)用問題瞻颂,弄清楚圖形的x軸和y軸分別所表示的含義豺谈,以及x軸和y軸之間的關(guān)系,才能選出最適合表達的圖形贡这。

除了圖形種類之外茬末,圖形所使用形狀、顏色盖矫、填充色等元素也可以有豐富的選擇丽惭。設(shè)計完以上內(nèi)容后,還需要為圖形添加合適的坐標軸標簽辈双、標題责掏、圖例等元素,只有恰當?shù)亟Y(jié)合好各方面內(nèi)容湃望,并且合理地表現(xiàn)出數(shù)據(jù)所蘊含的結(jié)論换衬,才能最終稱作一次成功的數(shù)據(jù)可視化。

基本語法

雖然Python中也有Matplotlib和Seaborn等繪圖工具包证芭,但要么繪圖效果不夠美觀瞳浦,要么語法不夠簡潔統(tǒng)一,或者繪圖定制的靈活度不高檩帐。相比之下术幔,ggplot2語法簡單、格式一致湃密,繪圖樣式多樣可定制诅挑,并且繪圖效果美觀清爽四敞。

使用ggplot2繪圖遵循以下代碼格式,data表示將要繪制圖形的數(shù)據(jù)框拔妥,geom_type()表示將要繪制的圖形種類忿危,type可以是point、bar没龙、line铺厨、boxplot、histogram等硬纤,分別表示散點圖解滓、條形圖、折線圖筝家、箱線圖洼裤、直方圖等。另外溪王,需要在ggplot()geom_type()完成繪圖元素的映射aes()腮鞍,即將數(shù)據(jù)框的列和x軸、y軸莹菱、大小移国、顏色等元素對應(yīng)起來。

ggplot(data) + geom_type()

以下代碼同時使用了散點圖和擬合線道伟,即ggplot2遵循圖層的概念迹缀,可以疊加任意數(shù)量的圖層,從而基于一個或多個數(shù)據(jù)框繪制多種圖形蜜徽。aes()如果提供在ggplot()中則默認對后續(xù)全部圖層生效裹芝,可以理解為全局配置;如果提供在geom_type()函數(shù)中娜汁,則僅對該圖層生效嫂易,可以理解為局部配置。

# 為了使用heightweight數(shù)據(jù)集而加載包
library(gcookbook)
ggplot(heightweight, aes(x=ageYear, y=heightIn, color=sex)) + geom_point() + geom_smooth()

條形圖

使用geom_bar()繪制條形圖掐禁,這里以BODcabbage_exp兩個數(shù)據(jù)集為例怜械。

BOD只有兩列Time和demand,一共6行數(shù)據(jù)傅事。以下代碼將Time映射到x軸缕允,將demand映射到y(tǒng)軸,以條形圖展示不同Time所對應(yīng)demand值蹭越。stat='identity'表示y軸使用變量的實際值而不是頻數(shù)障本,因為條形圖的另一種使用場景是展示不同類別記錄的數(shù)量,即類別值的出現(xiàn)頻數(shù),例如x軸表示男和女驾霜,y軸表示相應(yīng)性別的人群數(shù)量案训。

ggplot(BOD) + geom_bar(aes(x=Time, y=demand), stat='identity')

我們會發(fā)現(xiàn)繪圖結(jié)果中x=6處存在一處空缺,因為ggplot2將Time這一列當作數(shù)值型來處理粪糙,因此缺少了Time為6的記錄强霎。可以在繪圖時將Time這一列轉(zhuǎn)化為因子類型蓉冈,即可解決繪圖空缺問題城舞。

ggplot(BOD) + geom_bar(aes(x=factor(Time), y=demand), stat='identity')

cabbage_expgcookbook包提供的一個數(shù)據(jù)集,一共6行6列寞酿,可以在R中直接輸入數(shù)據(jù)集的名稱查看其內(nèi)容家夺。以下代碼用條形圖展示了cabbage_exp中,Cultivar取不同值所對應(yīng)的記錄頻數(shù)伐弹。這種情況下僅需指定x軸映射秦踪,無需提供y軸和stat='identity'

ggplot(cabbage_exp) + geom_bar(aes(x=Cultivar))

再來一個例子掸茅,x軸為Cultivar、y軸為Weight柠逞,并且將Date映射到填充色上昧狮。

ggplot(cabbage_exp) + geom_bar(aes(x=Cultivar, y=Weight, fill=Date), stat="identity")

使用position參數(shù)可以繪制分組條形圖。

ggplot(cabbage_exp) + geom_bar(aes(x=Cultivar, y=Weight, fill=Date), stat="identity", position="dodge")

折線圖

有了條形圖的基礎(chǔ)板壮,后續(xù)的圖形理解起來也就更快了逗鸣,以下代碼使用BOD數(shù)據(jù)集繪制折線圖。

ggplot(BOD) + geom_line(aes(x=Time, y=demand))
# 同時繪制折線圖和散點圖
# 將aes()寫在ggplot()里面绰精,對后續(xù)全部圖層都生效
ggplot(BOD, aes(x=Time, y=demand)) + geom_line() + geom_point()

以下代碼使用uspopage數(shù)據(jù)集繪制折線圖撒璧,有Year、AgeGroup笨使、Thousands三列卿樱,一共824行數(shù)據(jù),因此反應(yīng)的是每年不同年齡層的人口數(shù)量硫椰。

# 用line的color表示不同年齡層
ggplot(uspopage) + geom_line(aes(x=Year, y=Thousands, color=AgeGroup))
# 再來試試區(qū)域圖繁调,用area的fill表示不同年齡層
ggplot(uspopage) + geom_area(aes(x=Year, y=Thousands, fill=AgeGroup))

描述數(shù)據(jù)分布

可以使用直方圖、密度圖靶草、箱線圖等來描述數(shù)據(jù)分布蹄胰,這些圖中往往包含一些經(jīng)過統(tǒng)計和計算之后的數(shù)據(jù),而不像條形圖奕翔、折線圖裕寨、散點圖一樣僅使用原始數(shù)據(jù)。

使用geom_histogram()geom_density()宾袜、geom_boxplot()即可分別繪制直方圖捻艳、密度圖和箱線圖,具體使用方法參見下一節(jié)中的實戰(zhàn)項目试和。

分面

使用ggplot2繪圖時讯泣,可以將數(shù)據(jù)框的列映射到shape、color阅悍、size好渠、fill等繪圖元素上,從而同時展示包括x軸节视、y軸在內(nèi)的多個變量之間的關(guān)系拳锚。除此之外,也可以使用分面實現(xiàn)一圖多畫寻行,例如對于gender為male和female的情況分別畫一張圖霍掺,甚至是對多個類別型變量的全部組合情況分別作圖。

使用facet_wrap()實現(xiàn)分面拌蜘,這里給出一個簡單的例子杆烁,將之前映射到填充色的AgeGroup作為分面變量,從而畫出AgeGroup取不同水平時所對應(yīng)的區(qū)域圖简卧。

ggplot(uspopage) + geom_area(aes(x=Year, y=Thousands)) + facet_wrap(~AgeGroup)

R數(shù)據(jù)可視化

以上介紹了ggplot2的基本語法和幾種常見的基礎(chǔ)圖形兔魂,以及如何將數(shù)據(jù)框的列映射到圖形的x軸、y軸举娩、大小析校、顏色、填充色等繪圖元素上铜涉。關(guān)于ggplot2的更多內(nèi)容可以參考我的博客智玻,http://zhanghonglun.cn/blog/tag/r/,以上鏈接以r為標簽搜索相關(guān)文章芙代,搜索結(jié)果中會有一個《R數(shù)據(jù)可視化系列》吊奢,共11篇文章,可作為進一步學(xué)習(xí)ggplot2的參考資料纹烹。

視頻鏈接:ggplot2基本語法和基礎(chǔ)圖形

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末事甜,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子滔韵,更是在濱河造成了極大的恐慌逻谦,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,948評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陪蜻,死亡現(xiàn)場離奇詭異邦马,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評論 3 385
  • 文/潘曉璐 我一進店門滋将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邻悬,“玉大人,你說我怎么就攤上這事随闽「阜幔” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評論 0 348
  • 文/不壞的土叔 我叫張陵掘宪,是天一觀的道長蛾扇。 經(jīng)常有香客問我,道長魏滚,這世上最難降的妖魔是什么镀首? 我笑而不...
    開封第一講書人閱讀 56,521評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮鼠次,結(jié)果婚禮上更哄,老公的妹妹穿的比我還像新娘。我一直安慰自己腥寇,他們只是感情好成翩,可當我...
    茶點故事閱讀 65,627評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著赦役,像睡著了一般麻敌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上扩劝,一...
    開封第一講書人閱讀 49,842評論 1 290
  • 那天,我揣著相機與錄音职辅,去河邊找鬼棒呛。 笑死,一個胖子當著我的面吹牛域携,可吹牛的內(nèi)容都是我干的簇秒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,997評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼秀鞭,長吁一口氣:“原來是場噩夢啊……” “哼趋观!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起锋边,我...
    開封第一講書人閱讀 37,741評論 0 268
  • 序言:老撾萬榮一對情侶失蹤皱坛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后豆巨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剩辟,經(jīng)...
    沈念sama閱讀 44,203評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,534評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了贩猎。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熊户。...
    茶點故事閱讀 38,673評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖吭服,靈堂內(nèi)的尸體忽然破棺而出嚷堡,到底是詐尸還是另有隱情,我是刑警寧澤艇棕,帶...
    沈念sama閱讀 34,339評論 4 330
  • 正文 年R本政府宣布蝌戒,位于F島的核電站,受9級特大地震影響欠肾,放射性物質(zhì)發(fā)生泄漏瓶颠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,955評論 3 313
  • 文/蒙蒙 一刺桃、第九天 我趴在偏房一處隱蔽的房頂上張望粹淋。 院中可真熱鬧,春花似錦瑟慈、人聲如沸桃移。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽借杰。三九已至,卻和暖如春进泼,著一層夾襖步出監(jiān)牢的瞬間蔗衡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評論 1 266
  • 我被黑心中介騙來泰國打工乳绕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绞惦,地道東北人。 一個月前我還...
    沈念sama閱讀 46,394評論 2 360
  • 正文 我出身青樓洋措,卻偏偏與公主長得像济蝉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子菠发,可洞房花燭夜當晚...
    茶點故事閱讀 43,562評論 2 349

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

  • 簡介 文章較長王滤,點擊直達我的博客,瀏覽效果更好滓鸠。本文內(nèi)容基本是來源于STHDA雁乡,這是一份十分詳細的ggplot2使...
    taoyan閱讀 51,022評論 7 159
  • 如果某一天,我不小心失去了這個世界糜俗。 請為我種一束薔薇蔗怠,每年都開不同的顏色墩弯。 晴時擁抱陽光,雨時隨風(fēng)流浪寞射。
    木微痛閱讀 147評論 0 1
  • 老爸中風(fēng)了渔工,得到消息時已經(jīng)是四天后,已經(jīng)出了重癥監(jiān)護室桥温。 看到爸爸第一句話引矩,回家,要殺雞給我吃侵浸。雖然他走路還需要人...
    鯉薇半夏閱讀 301評論 0 0
  • 老玉米煮在鍋里旺韭, 盆挨盆花毛一體。 吆喝聲砍價聲掏觉, 云里霧里区端。 涼粉粉絲絲瓜瓜子, 混搭小生活澳腹。 魚頭蔥頭饅頭芋頭...
    淺得塾心靈文畫閱讀 237評論 6 5