ggplot學(xué)習(xí)筆記(一)

ggplot2的作圖一般步驟為:

準(zhǔn)備數(shù)據(jù)甘苍,一般為數(shù)據(jù)框贵涵, 且一般為長表痴荐, 即每個(gè)觀測時(shí)間占一行血柳, 每個(gè)觀測變量占一列。

將數(shù)據(jù)輸入到ggplot()函數(shù)中蹬昌, 并指定參與作圖的每個(gè)變量分別映射到哪些圖形特性混驰, 比如映射為x坐標(biāo)、y坐標(biāo)皂贩、顏色栖榨、形狀等。這些映射稱為aesthetic mappings或aesthetics明刷。

選擇一個(gè)合適的圖形類型婴栽, 函數(shù)名以geom_開頭, 如geom_point()表示散點(diǎn)圖辈末。圖形類型簡稱為geom愚争。將ggplot()部分與geom_xxx()部分用加號連接映皆。到此已經(jīng)可以作圖,下面的步驟是進(jìn)一步的細(xì)化設(shè)定轰枝。

設(shè)定適當(dāng)?shù)淖鴺?biāo)系統(tǒng)捅彻, 如coord_cartesian(),?scale_x_log10()等。仍用加號連接鞍陨。

設(shè)定標(biāo)題和圖例位置等步淹,如labs()。仍用加號連接诚撵。

這個(gè)流程的一個(gè)大致的模板為:

p <- ggplot(data=<輸入數(shù)據(jù)框>,mapping=aes(<維度>=<變量名>,<維度>=<變量名>,<...>))p + geom_<圖形類型>(<...>) +scale_<映射>_<類型>(<...>) +coord_<類型>(<...>) +labs(<...>)

其中<...>表示額外的選項(xiàng)缭裆。變量p包含做出的圖形的所有數(shù)據(jù)與設(shè)定, 變量名可以任意取寿烟。

一澈驼、散點(diǎn)圖

數(shù)據(jù)選用gapminder包中和socviz包中的數(shù)據(jù)集。

install.packages('gapminder')library(gapminder)head(gapminder,20)

# A tibble: 20 x 6countrycontinent? year lifeExp? ? ? pop gdpPercap<fct><fct>? ? <int>? <dbl>? ? <int>? ? <dbl>1Afghanistan Asia? ? ? 1952? ? 28.8? 8425333? ? ? 779.2Afghanistan Asia? ? ? 1957? ? 30.3? 9240934? ? ? 821.3Afghanistan Asia? ? ? 1962? ? 32.0 10267083? ? ? 853.4Afghanistan Asia? ? ? 1967? ? 34.0 11537966? ? ? 836.5Afghanistan Asia? ? ? 1972? ? 36.1 13079460? ? ? 740.6Afghanistan Asia? ? ? 1977? ? 38.4 14880372? ? ? 786.7Afghanistan Asia? ? ? 1982? ? 39.9 12881816? ? ? 978.8Afghanistan Asia? ? ? 1987? ? 40.8 13867957? ? ? 852.9Afghanistan Asia? ? ? 1992? ? 41.7 16317921? ? ? 649.10Afghanistan Asia? ? ? 1997? ? 41.8 22227415? ? ? 635.11Afghanistan Asia? ? ? 2002? ? 42.1 25268405? ? ? 727.12Afghanistan Asia? ? ? 2007? ? 43.8 31889923? ? ? 975.13Albania? ? Europe? ? 1952? ? 55.2? 1282697? ? 1601.14Albania? ? Europe? ? 1957? ? 59.3? 1476505? ? 1942.15Albania? ? Europe? ? 1962? ? 64.8? 1728137? ? 2313.16Albania? ? Europe? ? 1967? ? 66.2? 1984060? ? 2760.17Albania? ? Europe? ? 1972? ? 67.7? 2263554? ? 3313.18Albania? ? Europe? ? 1977? ? 68.9? 2509048? ? 3533.19Albania? ? Europe? ? 1982? ? 70.4? 2780097? ? 3631.20Albania? ? Europe? ? 1987? ? 72? ? 3075321? ? 3739.

socviz的數(shù)據(jù)集需要從github上下載

devtools::install_github("kjhealy/socviz")

如果連接不上筛武,也可自行下載后使用下列命令安裝

devtools::install_local("本地路徑")

查看前20行數(shù)據(jù)

head(gss_sm, 20)

以gapminder數(shù)據(jù)集作為輸入數(shù)據(jù)缝其, 做出簡單的散點(diǎn)圖, 并逐步進(jìn)行改善畅铭。這個(gè)數(shù)據(jù)集有多個(gè)國家在多個(gè)年份的期望壽命與人均GDP值氏淑, 作期望壽命對人均GDP的散點(diǎn)圖, 每個(gè)國家的每個(gè)年份作為一個(gè)點(diǎn)硕噩。散點(diǎn)圖最重要的映射是x軸與y軸兩個(gè)維度假残。

首先調(diào)用ggplot()函數(shù), 指定數(shù)據(jù)集炉擅, 將人均GDP映射到x軸辉懒, 將期望壽命映射到y(tǒng)軸, 結(jié)果保存為一個(gè)R變量:

p<-ggplot(data=gapminder,mapping=aes(x=gdpPercap,y=lifeExp))

x谍失、y軸是最常見的映射眶俩, 也可以將變量映射為顏色、符號快鱼、線型等颠印, 這時(shí)不需要指定具體的顏色、符號抹竹、線型线罕, 而是將變量映射為這些圖形元素類型。

ggplot()的調(diào)用中窃判, 可以省略data =,?mapping =,?x =,?y =钞楼, 寫成:

p<- ggplot(gapminder, aes(gdpPercap, lifeExp))

在如上指定了數(shù)據(jù)和映射后, 只要用geom_xxx()指定一個(gè)圖形類型袄琳, 并與ggplot()的結(jié)果用加號連接就可以作圖了询件,如:

p+ geom_point()

實(shí)際上燃乍,上面的程序等同于調(diào)用print(p + geom_point())。在R函數(shù)中或者在循環(huán)中需要顯式地調(diào)用print()宛琅, 否則不會(huì)顯示結(jié)果刻蟹。當(dāng)載入了tidyverse系統(tǒng)時(shí)可以寫成(p + geom_point()) %>% print()。

指定數(shù)據(jù)集夯秃、指定映射座咆、選擇適當(dāng)?shù)膱D形類型就可以做出基本的圖形, 隨后可以逐步對坐標(biāo)系仓洼、坐標(biāo)系刻度、標(biāo)簽與圖例堤舒、配色等進(jìn)行改善色建。實(shí)際上,ggplot2包已經(jīng)提供了十分合理的預(yù)設(shè)值舌缤, 用戶只要進(jìn)行一些必要的改動(dòng)即可箕戳。

作圖步驟之間用加號連接,這是ggplot包特有的語法国撵。例如陵吸, 用相同的映射做出擬合曲線圖:

p+ geom_smooth()

##`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

用相同的映射做出散點(diǎn)圖并疊加擬合曲線圖:

p+ geom_point() + geom_smooth()

##`geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'

geom_smooth()的默認(rèn)設(shè)置調(diào)用了gam()函數(shù)來擬合曲線, 可以用geom_smooth()的參數(shù)選擇不同的擬合方法介牙, 如直線擬合:

p+ geom_point() + geom_smooth(method="lm")

##`geom_smooth()`using formula'y ~ x'

注意geom_xxx()函數(shù)計(jì)算所需的變量值是從ggplot()函數(shù)保存在變量p中的信息提取的壮虫。

在以上的所有圖形中, x軸變量(人均GDP)分布非正態(tài)环础,嚴(yán)重右偏囚似, 使得大多數(shù)散點(diǎn)重疊地分布在直角坐標(biāo)系的左下角。將x軸用對數(shù)刻度可以改善线得, 函數(shù)為scale_x_log10():

p+ geom_point() +geom_smooth(method="gam") +? scale_x_log10()

##`geom_smooth()`using formula'y ~ s(x, bs = "cs")'

scale_xxx()的labels選項(xiàng)指定如何標(biāo)出坐標(biāo)刻度數(shù)字饶唤, 參數(shù)值是一個(gè)函數(shù)對象, 如果scales包中找不到適當(dāng)?shù)墓δ埽?可以自定義一個(gè)函數(shù)將數(shù)值轉(zhuǎn)換為字符串贯钩。scales包提供了comma,?date,?dollar,?math,number,?ordinal,?pvalue,?scientific,time等坐標(biāo)刻度值轉(zhuǎn)換函數(shù)募狂。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市角雷,隨后出現(xiàn)的幾起案子祸穷,更是在濱河造成了極大的恐慌,老刑警劉巖谓罗,帶你破解...
    沈念sama閱讀 222,590評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱哼,死亡現(xiàn)場離奇詭異,居然都是意外死亡檩咱,警方通過查閱死者的電腦和手機(jī)揭措,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,157評論 3 399
  • 文/潘曉璐 我一進(jìn)店門胯舷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人绊含,你說我怎么就攤上這事桑嘶。” “怎么了躬充?”我有些...
    開封第一講書人閱讀 169,301評論 0 362
  • 文/不壞的土叔 我叫張陵逃顶,是天一觀的道長。 經(jīng)常有香客問我充甚,道長以政,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,078評論 1 300
  • 正文 為了忘掉前任伴找,我火速辦了婚禮盈蛮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘技矮。我一直安慰自己抖誉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,082評論 6 398
  • 文/花漫 我一把揭開白布衰倦。 她就那樣靜靜地躺著袒炉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪樊零。 梳的紋絲不亂的頭發(fā)上我磁,一...
    開封第一講書人閱讀 52,682評論 1 312
  • 那天,我揣著相機(jī)與錄音淹接,去河邊找鬼十性。 笑死,一個(gè)胖子當(dāng)著我的面吹牛塑悼,可吹牛的內(nèi)容都是我干的劲适。 我是一名探鬼主播,決...
    沈念sama閱讀 41,155評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼厢蒜,長吁一口氣:“原來是場噩夢啊……” “哼霞势!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起斑鸦,我...
    開封第一講書人閱讀 40,098評論 0 277
  • 序言:老撾萬榮一對情侶失蹤愕贡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后巷屿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體固以,經(jīng)...
    沈念sama閱讀 46,638評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,701評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了憨琳。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诫钓。...
    茶點(diǎn)故事閱讀 40,852評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖篙螟,靈堂內(nèi)的尸體忽然破棺而出菌湃,到底是詐尸還是另有隱情,我是刑警寧澤遍略,帶...
    沈念sama閱讀 36,520評論 5 351
  • 正文 年R本政府宣布惧所,位于F島的核電站,受9級特大地震影響绪杏,放射性物質(zhì)發(fā)生泄漏下愈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,181評論 3 335
  • 文/蒙蒙 一蕾久、第九天 我趴在偏房一處隱蔽的房頂上張望驰唬。 院中可真熱鬧,春花似錦腔彰、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,674評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至卷谈,卻和暖如春杯拐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背世蔗。 一陣腳步聲響...
    開封第一講書人閱讀 33,788評論 1 274
  • 我被黑心中介騙來泰國打工端逼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人污淋。 一個(gè)月前我還...
    沈念sama閱讀 49,279評論 3 379
  • 正文 我出身青樓顶滩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寸爆。 傳聞我的和親對象是個(gè)殘疾皇子礁鲁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,851評論 2 361