1.1 簡(jiǎn)介
tidyverse的一個(gè)核心R包--ggplot2
首先安裝tidyverse
install.packages("tidyverse")
其次要加載tidyverse:
library(tidyverse)
R包只需安裝一次欢嘿,但每次開始新會(huì)話時(shí)都要重新加載蚯根。
1.2 第一步
1.2.1 mpg數(shù)據(jù)框
數(shù)據(jù)框:是變量(列)和觀測(cè)(行)的矩形集合痢法。
mpg:包含了由美國(guó)環(huán)境保護(hù)協(xié)會(huì)收集的38種車型的觀測(cè)數(shù)據(jù)。
?mpg
:了解更多關(guān)于mpg的信息赌躺,每個(gè)變量代表什么邻奠。舉例:displ: 引擎大小稚伍,單位為升疼蛾;hwy: 汽車在高速公路上行駛時(shí)的燃油效率,單位為英里/加侖愉舔。效率高耗油少效率低耗油多钢猛。
1.2.2 創(chuàng)建ggplot圖形
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))
提示: displ和hwy之間是負(fù)相關(guān)=大引擎更耗油
ggplot(data=mpg)
創(chuàng)建一張空白圖函數(shù)geom_point()=創(chuàng)建散點(diǎn)圖
ggplot2中每個(gè)幾何對(duì)象函數(shù)都有一個(gè)mapping參數(shù)。mapping參數(shù)總是與aes()函數(shù)成對(duì)出現(xiàn)屑宠,aes()函數(shù)的x參數(shù)和y參數(shù)分別指定了映射到x軸的變量與映射到y(tǒng)軸的變量厢洞。
1.2.3 繪圖模板
ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping=aes(<MAPPINGS>))
接下來(lái)的部分是展示如何完成并擴(kuò)展這個(gè)模板,以制作出各種類型的圖。
1.3 圖形屬性映射
定義/概念學(xué)習(xí)
圖形屬性:是圖中對(duì)象的可視化屬性躺翻,其中包括數(shù)據(jù)點(diǎn)的大小丧叽,形狀和顏色。
標(biāo)度變換:ggplot2會(huì)自動(dòng)為每個(gè)變量值分配唯一的圖形屬性水平的這個(gè)過(guò)程公你。
aes():將圖層中使用的每個(gè)圖形屬性映射集合在一起踊淳,然后傳遞給該圖層的映射參數(shù)
舉例1:將點(diǎn)的顏色映射為變量class,從而揭示每輛汽車的類型:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, color=class))
舉例2:將無(wú)序變量class映射為有序圖形屬性size:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, size=class))
舉例3:將變量class映射為不同點(diǎn)透明度:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, alpha=class))
舉例4:將變量class映射為不同形狀:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy, shape=class))
“gglot2只能同時(shí)使用6種形狀”
為幾何對(duì)象設(shè)置圖形屬性陕靠,要在函數(shù)aes()的外部進(jìn)行設(shè)置迂尝,并為這個(gè)圖形屬性選擇一個(gè)有意義的值
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), color="blue")
此時(shí)顏色不會(huì)傳達(dá)關(guān)于變量的信息,只是改變圖的外觀剪芥。
顏色名稱是一個(gè)字符串垄开;點(diǎn)的大小毫米表示;點(diǎn)的形狀是一個(gè)數(shù)值税肪。
舉例說(shuō)明:
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy), shape=24, color="red",fill="white")
1.4 常見問(wèn)題
- 檢查是否輸入正確的代碼
- “+” 必須放在一行代碼的末尾溉躲,不是開頭
- 運(yùn)行?函數(shù)名或者選定函數(shù)名稱后按F1鍵益兄,可以獲得任何R函數(shù)的幫助信息
- 閱讀錯(cuò)誤消息
- 搜Google
1.5 分面 (特別適合添加分類變量)
1.5.1 函數(shù)facet_wrap()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(~class, nrow=2)
1.5.2 函數(shù)facet_grid()
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
facet_wrap(drv ~ cyl)
1.6 幾何對(duì)象
幾何對(duì)象:圖中用來(lái)表示數(shù)據(jù)的幾何圖形對(duì)象锻梳。
條形圖——條形幾何對(duì)象
折線圖——直線幾何對(duì)象
箱線圖——矩形和直線幾何對(duì)象
散點(diǎn)圖——點(diǎn)幾何對(duì)象——geom_point
曲線圖——平滑曲線幾何對(duì)象——geom_smooth
ggplot2提供了30多種幾何對(duì)象,其擴(kuò)展包甚至提供更多净捅。
舉例說(shuō)明
(一)1條平滑曲線
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy))
(二)不同線性不同曲線疑枯,每條曲線對(duì)應(yīng)映射到線型的變量的一個(gè)唯一值
ggplot(data=mpg)+
geom_smooth(mapping=aes(x=displ,y=hwy,linetype=drv))
(三)同一張圖多個(gè)幾何對(duì)象,向ggplot2()函數(shù)添加多個(gè)幾何對(duì)象函數(shù):
舉例:
同一張圖繪制兩種幾何對(duì)象(點(diǎn)+曲線)
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ, y=hwy))+
geom_smooth(mapping=aes(x=displ,y=hwy))
等于以下代碼(上個(gè)代碼有重復(fù)內(nèi)容)
將一組映射傳遞給ggplot()函數(shù)蛔六,ggplot會(huì)將這些映射作為全局映射應(yīng)用到圖中的每個(gè)幾何對(duì)象中荆永。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point()+
geom_smooth()
都是下圖:
如果將映射放在幾何對(duì)象函數(shù)中,ggplot2會(huì)將其看作這個(gè)圖層的局部映射古今,僅對(duì)該圖層有效屁魏。
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth()
為不同圖層指定不同的數(shù)據(jù)
ggplot(data=mpg, mapping = aes(x=displ, y=hwy))+
geom_point(mapping=aes(color=class))+
geom_smooth(data=filter(mpg, class == "subcompact"),se=FALSE)
se=standard error, 是否display confidence interval around smooth
1.7 統(tǒng)計(jì)變換
定義/概念
統(tǒng)計(jì)變換 stat (statistical transformation):繪圖時(shí)用來(lái)計(jì)算新數(shù)據(jù)的算法滔以。
每個(gè)幾何對(duì)象函數(shù)都有一個(gè)默認(rèn)統(tǒng)計(jì)變換捉腥,每個(gè)統(tǒng)計(jì)變換函數(shù)都有一個(gè)默認(rèn)幾何對(duì)象。
舉例詳述:
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut))
?geom_bar顯示出stat的默認(rèn)值是count:這說(shuō)明geom_bar()使用stat_count()函數(shù)可以進(jìn)行統(tǒng)計(jì)變換
想要顯示使用某種統(tǒng)計(jì)變換的3個(gè)原因如下:
(1) 想要覆蓋默認(rèn)的統(tǒng)計(jì)變換
條形高度已經(jīng)存在與數(shù)據(jù)抵碟,而不是像前一個(gè)圖一樣,條形高度由對(duì)行進(jìn)行計(jì)數(shù)來(lái)生成:
<- 賦值坏匪;tibble:簡(jiǎn)單數(shù)據(jù)框拟逮,用tidyverse中的tibble包實(shí)現(xiàn)。
(2) 想要覆蓋從統(tǒng)計(jì)變換生成的變量到圖形屬性的默認(rèn)映射适滓。
舉例: 你或許想要顯示一張表示比例而不是計(jì)數(shù)的條形圖
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, y=..prop.., group=1))
(3) 在代碼中強(qiáng)調(diào)統(tǒng)計(jì)變換
舉例:使用stat_summary()函數(shù)將人們的注意力吸引到你計(jì)算出的那些摘要統(tǒng)計(jì)量上敦迄。
ggplot(data=diamonds)+
stat_summary(mapping=aes(x=cut,y=depth),fun.ymin=min,fun.ymax = max, fun.y = median)
ggplot2速查表已下載
(https://rstudio.com/resources/cheatsheets/)
1.8 位置調(diào)整
(一)為條形圖上色
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, color=cut))
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=cut))
如果將圖形屬性映射到另一個(gè)變量(如,clarity),那么條形會(huì)自動(dòng)分塊堆疊起來(lái)罚屋。
每個(gè)彩色矩形表示cut和clarit的一種組合苦囱。
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity))
這種堆疊是由position參數(shù)設(shè)定的位置調(diào)整功能自動(dòng)完成的。
(二)如果不想生成堆疊式條形圖脾猛,還可以使用以下3種選項(xiàng)之一:"identity", "fill", "dodge"撕彤。
- position = "identity": 將每個(gè)對(duì)象直接顯示在圖中。(不太適合條形圖猛拴,因?yàn)橹丿B)
設(shè)置alpha參數(shù)為較小的書羹铅,可以使得條形略微透明
ggplot(data=diamonds, mapping = aes(x=cut,fill=clarity))+
geom_bar(alpha=1/5, position = "identity")
設(shè)置fill=NA, 讓條形完全透明
ggplot(data=diamonds, mapping = aes(x=cut,color=clarity))+
geom_bar(fill=NA, position = "identity")
- position = "fill": 效果與堆疊相似(每組條形具有同樣的高度)
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "fill")
-position = "dodge": 將每組中的條形依次并列放置
ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut, fill=clarity),position = "dodge")
(三)散點(diǎn)圖的位置調(diào)整
- position = "jitter": 將重疊的點(diǎn)分散開來(lái) = geom_jitter()
ggplot(data = mpg)+
geom_point(mapping = aes(x=displ,y=hwy),position="jitter")
1.9 坐標(biāo)系
- coord_flip()函數(shù):交換x軸和y軸
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()
ggplot(data=mpg, mapping = aes(x=class,y=hwy))+
geom_boxplot()+
coord_flip()
- coord_quickmap()函數(shù):為地圖設(shè)置合適的縱橫比,適用于空間數(shù)據(jù)
未安裝Package : map所以不能用數(shù)據(jù)和示例
- coord_polar()函數(shù):極坐標(biāo)系愉昆,揭示條形圖和雞冠花圖之間的有趣聯(lián)系
bar <- ggplot(data=diamonds)+
geom_bar(mapping = aes(x=cut,fill=cut),show.legend = FALSE, width = 1)+
theme(aspect.ratio = 1)+
labs(x=NULL, y=NULL)
bar+coord_flip()
bar+coord_polar()
1.10 圖形分層語(yǔ)法
一個(gè)正式語(yǔ)法系統(tǒng)(7個(gè)參數(shù)一同組成了圖形語(yǔ)法)
ggplot(data=<DATA>)+
<GEOM_FUNCTION>(mapping = aes (<MAPPINGS>),stat = <STAT>, position =<POSITION>+
<COORDINATE_FUNCTION>+
<FACET_FUNCTION>
如何從頭構(gòu)建一個(gè)基本圖形
step1 首先要有一個(gè)數(shù)據(jù)集
step2 通過(guò)統(tǒng)計(jì)變換將其轉(zhuǎn)換為想要顯示的信息
step3 選擇一個(gè)幾何對(duì)象來(lái)表示轉(zhuǎn)換后的數(shù)據(jù)中的每個(gè)觀測(cè)值
step4 選擇幾何對(duì)象的圖形屬性來(lái)表示數(shù)據(jù)中的變量
step5 選擇放置幾何對(duì)象的坐標(biāo)系
step6 進(jìn)一步調(diào)整幾何對(duì)象在坐標(biāo)系中的位置(位置調(diào)整)职员,將圖劃分為多個(gè)子圖(分面)...
使用這種方法可以構(gòu)建任何圖形。