1. 簡介 2. 第一步 3. 添加變量之——圖形屬性映射 4. 添加變量之——分面 4.1 facet_wrap()函數(shù) 4.2 facet_grid()函數(shù)
5. 幾何對象 6. 統(tǒng)計(jì)變換(stat) 7 位置調(diào)整(position) 7.1 position = "stack" (默認(rèn)):分塊堆疊 7.2 position = "identity":覆蓋重疊 7.3 position = "fill":百分比堆疊 7.4 position = "dodge":并列放置 7.5 position = "jitter":隨機(jī)抖動(dòng)
8. 坐標(biāo)系 8.1 coord_flip() 函數(shù)可以交換 x 軸和 y 軸 8.2 coord_quickmap() 函數(shù)為地圖設(shè)置合適的縱橫比 8.3 coord_polar() 函數(shù)使用極坐標(biāo)系
9. 圖形分層語法
1. 簡介 R 有好幾種繪圖工具,,但 ggplot2 是其中最優(yōu)雅,、功能最全面的一個(gè),。 本章重點(diǎn)討論 tidyverse 的一個(gè)核心 R 包——ggplot2,。關(guān)于tidyverse的介紹詳見 首先,,運(yùn)行以下代碼來加載 tidyverse,以訪問其包含的數(shù)據(jù)集,、幫助頁面和函數(shù),。
library(tidyverse)
# # 這一行代碼加載了 tidyverse 的核心 R 包。在幾乎所有的數(shù)據(jù)分析任務(wù)中,,都會(huì)用到這些 R 包,。 -- Attaching packages ----------------------------------------------------------------- tidyverse 1.3.1 -- √ ggplot2 3.3.5 √ purrr 0.3.4 √ tibble 3.1.3 √ dplyr 1.0.7 √ tidyr 1.1.3 √ stringr 1.4.0 √ readr 2.0.0 √ forcats 0.5.1
# 這行代碼還會(huì)告訴你 tidyverse 中的哪些函數(shù)與基礎(chǔ) R 包(或者已加載的其他 R 包)中的函數(shù)有沖突。 -- Conflicts -------------------------------------------------------------------- tidyverse_conflicts() -- x dplyr::filter() masks stats::filter() x dplyr::lag() masks stats::lag()
# 如果運(yùn)時(shí)出現(xiàn)錯(cuò)誤消息“there is no package called'tidyverse’”,,需要先安裝 tidyverse,,再運(yùn)行 library() 函數(shù): install.packages("tidyverse") # 安裝,即告訴R你需要這個(gè)工具 library(tidyverse) # 加載,,即告訴R你要用(調(diào)用)這個(gè)工具,,但前提是你得有這個(gè)工具,所以要先安裝,。
# R 包只需安裝一次,,但每次開始新會(huì)話時(shí)都要重新加載,。
# 如果想要明確指出某個(gè)函數(shù)(或數(shù)據(jù)集)的來源,那么可以使用特殊語法形式. package::function()。 # 例如, ggplot2::ggplot()明確指出了我們使用的是ggplot2包中的1ggplot()函數(shù),。
2. 第一步2.1 mpg數(shù)據(jù)框數(shù)據(jù)框是變量(列)和觀測(行)的矩形集合,。 mpg 包含了由美國環(huán)境保護(hù)協(xié)會(huì)收集的 38 種車型的觀測數(shù)據(jù)。 > mpg # A tibble: 234 x 11 manufacturer model displ year cyl trans drv cty hwy fl class <chr> <chr> <dbl> <int> <int> <chr> <chr> <int> <int> <chr> <chr> 1 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact 2 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact 3 audi a4 2 2008 4 manual(m6) f 20 31 p compact 4 audi a4 2 2008 4 auto(av) f 21 30 p compact 5 audi a4 2.8 1999 6 auto(l5) f 16 26 p compact 6 audi a4 2.8 1999 6 manual(m5) f 18 26 p compact 7 audi a4 3.1 2008 6 auto(av) f 18 27 p compact 8 audi a4 quattro 1.8 1999 4 manual(m5) 4 18 26 p compact 9 audi a4 quattro 1.8 1999 4 auto(l5) 4 16 25 p compact 10 audi a4 quattro 2 2008 4 manual(m6) 4 20 28 p compact # ... with 224 more rows
mpg 中共包括11個(gè)變量 - manufacturer 生產(chǎn)廠商 - model 品牌 - displ 引擎大小,,單位為升 - year 出廠年份 - cyl 氣缸數(shù) - trans 變壓器類型 - drv 驅(qū)動(dòng)類型,,其中f =前輪驅(qū)動(dòng),r =后輪驅(qū)動(dòng),,4 = 4wd - cty 城市燃油效率,,單位為英里/加侖 - hwy 公路燃油效率,單位為英里 / 加侖(mpg),。與燃油效率高的汽車相比,,燃油效率低的汽車在行駛相同距離時(shí)要消耗更多燃油。 - fl 燃油類型 - class 車種
那么我們是如何了解到關(guān)于 mpg 的這些信息呢,? # 直接運(yùn)行這條代碼,,會(huì)在控制臺(tái)窗格(左下角)中顯示部分?jǐn)?shù)據(jù)信息(部分行,部分列) mpg
# 用view()函數(shù),,會(huì)在新的窗口中顯示全部數(shù)據(jù)信息(全部行,,全部列),類似于Excel數(shù)據(jù)表,。 view(mpg)
# 運(yùn)行這條代碼,,會(huì)在輸出結(jié)果窗格(右下角)的Help頁面中顯示關(guān)于mpg 的詳細(xì)介紹。 # 或者,,選中mpg,,按F1鍵也可以得到同樣的效果。 ?mpg
2.2 創(chuàng)建ggplot圖形:ggplot()函數(shù)和geom_point()函數(shù)提出問題:大引擎汽車比小引擎汽車更耗油嗎,? 需要數(shù)據(jù):displ 引擎大?。籧ty(城市燃油效率) 或 hwy(高速公路燃油效率) 設(shè)想圖形:散點(diǎn)圖,,x為displ,,y為 cty 或 hwy。 那么如何用ggplot2來繪制這一圖形呢,? ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy))
運(yùn)行結(jié)果如下: 可見,,引擎大小(displ)和燃油效率(hwy)之間是負(fù)相關(guān)關(guān)系,。也就是說,,大引擎汽車更耗油。 ggplot()函數(shù) 函數(shù)1:ggplot() - 功能:創(chuàng)建一個(gè)新的ggplot(或坐標(biāo)系),,可以在它上面添加圖層,。 - 用法:ggplot(data = NULL, mapping = aes(), ..., environment = parent.frame()) - 參數(shù)data:要在圖中使用的數(shù)據(jù)集,。 - 參數(shù)mapping:用于繪圖的默認(rèn)映射列表。如果沒有指定,,則必須在添加的圖層中提供,。函數(shù)aes()用于構(gòu)建映射。
geom_point()函數(shù) 函數(shù)2:geom_point() - 功能:向圖中添加一個(gè)點(diǎn)層 - 用法:geom_point(mapping = NULL, data = NULL, stat = "identity", position = "identity", ..., na.rm = FALSE, show.legend = NA, inherit.aes = TRUE) - 參數(shù)mapping:由aes()或aes_()創(chuàng)建的映射集,。定義了如何將數(shù)據(jù)集中的變量映射為圖形屬性,。mapping 參數(shù)總是與 aes() 函數(shù)成對出現(xiàn), aes() 函數(shù)的 x 參數(shù)和 y 參數(shù)分別指定了映射到 x 軸的變量與映射到 y 軸的變量,。 - 參數(shù)data:要在這一層顯示的數(shù)據(jù),。有三種選擇:① NULL(即默認(rèn)值),用ggplot()中指定的繪圖數(shù)據(jù),;② 用data.frame或其他對象覆蓋繪圖數(shù)據(jù),;③ 用函數(shù)創(chuàng)建,如~ head(.x, 10) - 參數(shù)stat:要在此層的數(shù)據(jù)上使用的統(tǒng)計(jì)轉(zhuǎn)換,,為字符串,。 - 參數(shù)position:位置調(diào)整,可以是字符串,,也可以是調(diào)用位置調(diào)整函數(shù)的結(jié)果,。 - 參數(shù)na.rm:默認(rèn)為FALSE,刪除NA(缺失值)并發(fā)出警告,;如果為TRUE,,刪除NA(缺失值)但不顯示警告。二者的區(qū)別僅在于是否顯示警告,。 - 參數(shù)show.legend:是否顯示圖例。為邏輯值,,也可以是一個(gè)邏輯向量,。① 默認(rèn)NA,包括是否有任何美學(xué)映射:② FALSE 從不包含,;③ TRUE 總是包含圖例,。
2.3 繪圖模板要想生成一張圖,將以下代碼中的尖括號(hào)部分替換為數(shù)據(jù)集,、幾何對象函數(shù),、映射集合即可。 ggplot(data = <DATA>) + # 數(shù)據(jù)集 <GEOM_FUNCTION>( # 幾何對象 mapping = aes(<MAPPINGS>)) # 映射集合
3. 添加變量之——圖形屬性映射可以向二維散點(diǎn)圖中添加第三個(gè)變量,,比如 class,,方式是將它映射為圖形屬性。 圖形屬性是圖中對象的可視化屬性,,其中包括數(shù)據(jù)點(diǎn)的大小,、形狀和顏色,。 3.1 將變量 class映射為點(diǎn)的圖形屬性需要在函數(shù) aes() 中將圖形屬性名稱和變量名稱關(guān)聯(lián)起來。 ggplot2 還會(huì)添加一個(gè)圖例,,以表示圖形屬性水平和變量值之間的對應(yīng)關(guān)系,。 ggplot2 不會(huì)為 x 和 y 這兩個(gè)圖形屬性創(chuàng)建圖例,而會(huì)創(chuàng)建帶有刻度標(biāo)記和標(biāo)簽的坐標(biāo)軸,。坐標(biāo)軸就相當(dāng)于圖例,,可以體現(xiàn)出位置和變量值之間的映射關(guān)系。
# 將class映射為點(diǎn)的顏色,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy,color=class))
# 將class映射為點(diǎn)的大小,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy,size=class))
# 將class映射為點(diǎn)的透明度。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy,alpha=class))
# 將class映射為點(diǎn)的形狀,。ggplot2 只能同時(shí)使用 6 種形狀,。默認(rèn)情況下,當(dāng)使用這種圖形屬性時(shí),,多出的變量值將不會(huì)出現(xiàn)在圖中,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy,shape=class))
3.2 手動(dòng)為幾何對象設(shè)置圖形屬性需要將其作為幾何對象函數(shù)(如geom_point())的一個(gè)參數(shù),即在函數(shù) aes() 的外部進(jìn)行設(shè)置,。 此外,,還需要為這個(gè)圖形屬性選擇一個(gè)有意義的值。 顏色名稱是一個(gè)字符串(如color="blue"),;點(diǎn)的大小用毫米表示(如size=1),;點(diǎn)的形狀是一個(gè)數(shù)值(如shape=4),。
# 例如,,可以讓圖中的所有點(diǎn)都為藍(lán)色: ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy),color="blue")
4. 添加變量之——分面添加額外變量的另一種方法是將圖分割成多個(gè)分面,即可以顯示數(shù)據(jù)子集的子圖,。這種方法特別適合添加分類變量,。 4.1 facet_wrap()函數(shù)- 功能:通過單個(gè)變量對圖進(jìn)行分面,。 - 用法:facet_wrap( facets, nrow = NULL, ncol = NULL, scales = "fixed", shrink = TRUE, labeller ="label_value", as.table = TRUE, switch = NULL, drop = TRUE, dir = "h", strip.position = "top") - 參數(shù) facets:是一個(gè)公式,創(chuàng)建公式的方式是在 ~ 符號(hào)后面加一個(gè)變量名,。 - 參數(shù) nrow 和 ncol :分面行數(shù)和列數(shù),。 - 與facet_grid()函數(shù)不同,facet_wrap()函數(shù)是按一個(gè)變量進(jìn)行分面,,即使手動(dòng)設(shè)置 nrow = 2 分成2行,,也是按同一個(gè)變量分的,只是為了好看,,并無實(shí)際意義,;而facet_grid()函數(shù)是按兩個(gè)變量,行和列維度有不同的意義。 - 傳遞給 facet_wrap() 的變量應(yīng)該是離散型的,。
# 按 class 進(jìn)行分面,,分成2行。 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2)
4.2 facet_grid()函數(shù)功能:通過兩個(gè)變量對圖進(jìn)行分面,。 第一個(gè)參數(shù)也是一個(gè)公式,,但該公式包含由 ~ 隔開的兩個(gè)變量名。 ~左邊表示在行的維度進(jìn)行分面,,右邊表示在列的維度進(jìn)行分面,。
# 在行的維度按drv(驅(qū)動(dòng)類型)分面,在列的維度按cyl(氣缸數(shù))分面,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy))+ facet_grid(drv~cyl)
# 僅在列的維度按cyl(氣缸數(shù))進(jìn)行分面,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy))+ facet_grid(.~cyl)
5. 幾何對象幾何對象是圖中用來表示數(shù)據(jù)的幾何圖形對象,。 要想改變圖中的幾何對象,,需要修改添加在 ggplot() 函數(shù)中的幾何對象函數(shù)。 條形圖:geom_bar()函數(shù); 折線圖:geom_line()函數(shù); 箱線圖:geom_boxplot()函數(shù),; 散點(diǎn)圖:geom_point()函數(shù),; 平滑曲線:geom_smooth()函數(shù); 直方圖:geom_histogram()函數(shù),;
ggplot2 中的每個(gè)幾何對象函數(shù)都有一個(gè) mapping 參數(shù),。 不是每種圖形屬性都適合每種幾何對象。比如,,可以設(shè)置點(diǎn)的形狀,,但不能設(shè)置線的“形狀”,而可以設(shè)置線的線型,。 分組 # 未分組 ggplot(data=mpg)+ geom_smooth(mapping=aes(x=displ,y=hwy))
# 僅分組:可以將這些幾何對象的 group 圖形屬性設(shè)置為一個(gè)分類變量,, ggplot2 就會(huì)為這個(gè)分類變量的每個(gè)唯一值繪制一個(gè)獨(dú)立的幾何對象,即進(jìn)行分組,。 ggplot(data=mpg)+ geom_smooth(mapping=aes(x=displ,y=hwy,group=drv)) # 分組且分顏色:只要將一個(gè)圖形屬性(如 color )映射為一個(gè)離散變量(drv), ggplot2 就會(huì)自動(dòng)對數(shù)據(jù)進(jìn)行分組來繪制多個(gè)幾何對象 # 添加參數(shù) show.legend=FALSE:不顯示圖例,。 ggplot(data=mpg)+ geom_smooth(mapping=aes(x=displ,y=hwy,color=drv),show.legend=FALSE)
要想在同一張圖中顯示多個(gè)幾何對象,,可以向 ggplot() 函數(shù)中添加多個(gè)幾何對象函數(shù) # 代碼有重復(fù),不易修改,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy))+ geom_smooth(mapping=aes(x=displ,y=hwy)) # 避免重復(fù)(全局映射):將一組映射傳遞給 ggplot() 函數(shù),。ggplot2 會(huì)將這些映射應(yīng)用到圖中的每個(gè)幾何對象中。 ggplot(data=mpg,mapping=aes(x=displ,y=hwy))+ geom_point()+ geom_smooth()
# 局部映射:如果將映射放在幾何對象函數(shù)中,ggplot2 將使用這些映射擴(kuò)展或覆蓋全局映射,,但僅對該圖層有效,。
# 可以在不同的圖層中顯示不同的圖形屬性。 ggplot(data=mpg,mapping=aes(x=displ,y=hwy))+ geom_point(mapping=aes(color=class))+ # 散點(diǎn)圖按class進(jìn)行顏色分類 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) # 平滑曲線表示的只是 mpg 數(shù)據(jù)集的一個(gè)子集,,即微型車。其中 se=FALSE 表示去掉平滑時(shí)的灰色區(qū)域,。
6. 統(tǒng)計(jì)變換(stat)6.1 diamonds 數(shù)據(jù)集是 ggplot2 的內(nèi)置數(shù)據(jù)集,,包含大約 54 000 顆鉆石的信息。 共包含10個(gè)變量,。每顆鉆石具有 price,、 carat、 color,、clarity 和 cut 等變量,。
- price:價(jià)格,單位為美元(\$326–\$18,823) - carat:鉆石質(zhì)量(克拉數(shù))(0.2–5.01) - cut:切割質(zhì)量(Fair, Good, Very Good, Premium, Ideal) - color:鉆石顏色,,從D (best) 到 J (worst) - clarity:鉆石清晰度 (I1 (worst), SI2, SI1, VS2, VS1, VVS2, VVS1, IF (best)) - x:長度,,單位 mm (0–10.74) - y:寬度,單位 mm (0–58.9) - z:深度,,單位 mm (0–31.8) - depth:全深比 = z / mean(x, y) = 2 * z / (x + y) (43–79) - table:鉆石頂部相對于最寬點(diǎn)的寬度(43–95)
6.2 geom_bar()函數(shù)- 功能:繪制條形圖 - 用法:geom_bar(mapping = NULL, data = NULL, stat = "count", position = "stack", ..., width = NULL, na.rm = FALSE, orientation = NA, show.legend = NA, inherit.aes = TRUE) - 參數(shù)stat:統(tǒng)計(jì)變換,,默認(rèn)值是count,說明geom_bar()使用stat_count() 函數(shù)進(jìn)行統(tǒng)計(jì)變換,。stat_count()會(huì)計(jì)算出兩個(gè)變量:count 和 prop,。
# 不同切割質(zhì)量的鉆石數(shù)量。 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut))
該圖 x 軸顯示的是 cut,,這是 diamonds 數(shù)據(jù)集中的一個(gè)變量,。y 軸顯示的是 count,但 count 不是 diamonds 中的變量,! 很多圖形繪制的是數(shù)據(jù)集的原始數(shù)據(jù),,比如散點(diǎn)圖。另外一些圖形則可以繪制那些計(jì)算出的新數(shù)據(jù),,比如條形圖,。 條形圖、直方圖和頻率多邊形圖可以對數(shù)據(jù)進(jìn)行分箱,,然后繪制出分箱數(shù)量和落在每個(gè)分箱的數(shù)據(jù)點(diǎn)的數(shù)量,。 平滑曲線會(huì)為數(shù)據(jù)擬合一個(gè)模型,然后繪制出模型預(yù)測值,。 箱線圖可以計(jì)算出數(shù)據(jù)分布的多種摘要統(tǒng)計(jì)量,,并顯示一個(gè)特殊形式的箱體。
6.3 統(tǒng)計(jì)變換統(tǒng)計(jì)變換(statistical transformation,,stat):是指繪圖時(shí)用來計(jì)算新數(shù)據(jù)的算法,。 geom_bar() 函數(shù)的統(tǒng)計(jì)變換過程如下: geom_bar() 的默認(rèn)統(tǒng)計(jì)變換(stat)是count,說明geom_bar() 使用 stat_count() 函數(shù)進(jìn)行統(tǒng)計(jì)變換,。 stat_count() 會(huì)計(jì)算出兩個(gè)新變量:count 和 prop,。 但geom_bar() 的默認(rèn)統(tǒng)計(jì)變換(stat)是count,所以條形圖的y軸是count,。
通常,,幾何對象函數(shù)(如 geom_bar())和統(tǒng)計(jì)變換函數(shù)(如stat_count())可以互換使用。 # 可以使用 stat_count() 替換 geom_bar() 來重新生成前面那張圖 ggplot(data=diamonds)+ stat_count(mapping=aes(x=cut))
顯式使用統(tǒng)計(jì)變換的情況如下: 覆蓋默認(rèn)的統(tǒng)計(jì)變換,。設(shè)置參數(shù) stat = "identity",,使條形的高度映射為 y 軸變量的初始值(即y值),這樣得到的就是我們通常見到的條形圖,。
demo <- tribble( ~a, ~b, "bar_1", 20, "bar_2", 30, "bar_3", 40 )
ggplot(data = demo) + geom_bar( mapping = aes(x = a, y = b), stat = "identity" )
覆蓋從統(tǒng)計(jì)變換生成的變量到圖形屬性的默認(rèn)映射,。
# 顯示一張表示比例(而不是計(jì)數(shù))的條形圖 # 幫助文件中的“Computed variables”可以查看由統(tǒng)計(jì)變換計(jì)算出的變量。 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,y=..prop..,group=1))
在代碼中強(qiáng)調(diào)統(tǒng)計(jì)變換,。如用stat_summary() 函數(shù)做摘要統(tǒng)計(jì)量,,這里統(tǒng)計(jì)變換是summary 而非 count。
ggplot(data=diamonds)+ stat_summary(mapping=aes(x=cut,y=depth), fun.min = min, fun.max = max, fun = median ) ggplot(data=diamonds)+ geom_pointrange( mapping=aes(x=cut,y=depth), stat = "summary", # geom_pointrange()的默認(rèn)stat是identity,,故要特別指出,。 fun.min=min, # Stat_summary()用平均值和sd來計(jì)算直線的中點(diǎn)和端點(diǎn),而上圖端點(diǎn)用的是最小值和最大值,,故要重新計(jì)算,。 fun.max=max, # ggplot2 v 3.3.0.已棄用fun.ymin、fun.ymax和fun.y,,替換為fun.min,、fun.max和fun fun=median )
7 位置調(diào)整(position)條形圖還可以使用 color(邊界色) 或者 fill(填充色)圖形屬性來為條形圖上色: # 未填充 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut)) # 填充 color 邊界色 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,color=cut)) # 填充 fill 填充色 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,fill=cut))
7.1 position = "stack" (默認(rèn)):分塊堆疊如果將 fill 圖形屬性映射到另一個(gè)變量(如 clarity),那么條形會(huì)自動(dòng)分塊堆疊起來,。 # 每個(gè)彩色矩形表示 cut 和 clarity 的一種組合,。 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,fill=clarity))
自動(dòng)分塊堆疊是由 position 參數(shù)設(shè)定的位置調(diào)整功能自動(dòng)完成的。如果不想生成堆疊式條形圖,,還可以使用以下 3 種選項(xiàng)之一: "identity",、 "fill" 和 "dodge"。 7.2 position = "identity":覆蓋重疊# ① position="identity":柱子彼此間會(huì)覆蓋重疊(縱坐標(biāo)最高為5000,,分塊堆疊時(shí)最高為20000),,不太適合條形圖 ggplot(data=diamonds,mapping=aes(x=cut,fill=clarity))+ geom_bar()
7.3 position = "fill":百分比堆疊# ② position="fill":與堆疊相似,但每組條形的高度一致,。用途:比較各組間比例,。 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,fill=clarity),position="fill")
7.4 position = "dodge":并列放置# ③ position="dodge"(躲開):將每組中的條形依次并列放置。用途:比較具體數(shù)值,。 ggplot(data=diamonds)+ geom_bar(mapping=aes(x=cut,fill=clarity),position="dodge")
7.5 position = "jitter":隨機(jī)抖動(dòng)# 默認(rèn)位置調(diào)整(position=“identity”),,對值都進(jìn)行了舍入取整,導(dǎo)致很多點(diǎn)彼此重疊(過繪制),。234個(gè)觀測值,,散點(diǎn)圖中只顯示了126個(gè)點(diǎn)。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy)) # ④ position="jitter":抖動(dòng),,即為每個(gè)數(shù)據(jù)點(diǎn)添加一個(gè)很小的隨機(jī)擾動(dòng),,這樣就可以將重疊的點(diǎn)分散開來。適合于散點(diǎn)圖,,可以避免網(wǎng)格化排列,。 ggplot(data=mpg)+ geom_point(mapping=aes(x=displ,y=hwy),position="jitter")
8. 坐標(biāo)系
ggplot2 默認(rèn)的坐標(biāo)系是笛卡兒直角坐標(biāo)系。偶爾也會(huì)用到一些其他類型的坐標(biāo)系,。 8.1 coord_flip() 函數(shù)可以交換 x 軸和 y 軸當(dāng)想要繪制水平箱線圖時(shí),,這非常有用。它也非常適合使用長標(biāo)簽,。 # 默認(rèn) ggplot(data=mpg,mapping=aes(x=class,y=hwy))+ geom_boxplot()
# 用coord_flip() 函數(shù)交換 x 軸和 y 軸 ggplot(data=mpg,mapping=aes(x=class,y=hwy))+ geom_boxplot()+ coord_flip()
8.2 coord_quickmap() 函數(shù)為地圖設(shè)置合適的縱橫比當(dāng)使用 ggplot2 繪制空間數(shù)據(jù)時(shí),, 這個(gè)函數(shù)特別重要。 nz <- map_data("nz")
# 默認(rèn)縱橫比 ggplot(nz,aes(long,lat,group=group))+ geom_polygon(fill="white",color="black") # 用coord_quickmap() 函數(shù)為地圖設(shè)置合適的縱橫比 ggplot(nz,aes(long,lat,group=group))+ geom_polygon(fill="white",color="black")+ coord_quickmap()
8.3 coord_polar() 函數(shù)使用極坐標(biāo)系極坐標(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() # 交換x軸和y軸(條形圖) bar+coord_polar() # 極坐標(biāo)系(雞冠花圖)
9. 圖形分層語法9.1 繪圖模板向前面的代碼模板中添加位置調(diào)整,、統(tǒng)計(jì)變換,、坐標(biāo)系和分面: # 要想生成一張圖,將以下代碼中的尖括號(hào)部分替換即可: ggplot(data = <DATA>) + # 數(shù)據(jù)集 <GEOM_FUNCTION>( # 幾何對象 mapping = aes(<MAPPINGS>), # 映射集合 stat = <STAT>, # 統(tǒng)計(jì)變換 position = <POSITION> # 位置調(diào)整 ) + <COORDINATE_FUNCTION> + # 坐標(biāo)系 <FACET_FUNCTION> # 分面
9.2 如何從頭開始構(gòu)建一個(gè)基本圖形,?接下來,,可以選擇一個(gè)幾何對象(如條形圖)來表示轉(zhuǎn)換后的數(shù)據(jù)中的每個(gè)觀測值。 然后,,選擇幾何對象的圖形屬性(如fill)來表示數(shù)據(jù)中的變量,,這會(huì)將每個(gè)變量的值映射為圖形屬性的水平。
這樣就生成了一張完整的圖。但還可以進(jìn)行進(jìn)一步調(diào)整,。 可以進(jìn)一步調(diào)整幾何對象在坐標(biāo)系中的位置(位置調(diào)整) 或者將圖劃分為多個(gè)子圖(分面) 還可以通過添加一個(gè)或多個(gè)附加圖層對圖進(jìn)行擴(kuò)展,,其中每個(gè)附加圖層都使用一個(gè)數(shù)據(jù)集、一個(gè)幾何對象,、一個(gè)映射集合,、一個(gè)統(tǒng)計(jì)變換和一個(gè)位置調(diào)整,。
根際互作生物學(xué)研究室 簡介根際互作生物學(xué)研究室是沈其榮教授土壤微生物與有機(jī)肥團(tuán)隊(duì)下的一個(gè)關(guān)注于根際互作的研究小組。本小組由袁軍副教授帶領(lǐng),,主要關(guān)注:1.植物和微生物互作在抗病過程中的作用,;2 環(huán)境微生物大數(shù)據(jù)整合研究;3 環(huán)境代謝組及其與微生物過程研究體系開發(fā)和應(yīng)用,。團(tuán)隊(duì)在過去三年中在 isme J,, Microbiome, PCE,,SBB,,Horticulture Research等期刊上發(fā)表了多篇文章。歡迎關(guān)注 微生信生物 公眾號(hào)對本研究小組進(jìn)行了解,。
|