久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

《R數(shù)據(jù)科學(xué)》第1章-ggplot2圖層與繪圖大法-全

 微生信生物 2021-08-31
  • 1. 簡介

  • 2. 第一步

    • 2.1 mpg數(shù)據(jù)框

    • 2.2 創(chuàng)建ggplot圖形:ggplot()函數(shù)和geom_point()函數(shù)

    • 2.3 繪圖模板

  • 3. 添加變量之——圖形屬性映射

    • 3.1 將變量 class映射為點(diǎn)的圖形屬性

    • 3.2 手動(dòng)為幾何對象設(shè)置圖形屬性

  • 4. 添加變量之——分面

    • 4.1 facet_wrap()函數(shù)

    • 4.2 facet_grid()函數(shù)

  • 5. 幾何對象

  • 6. 統(tǒng)計(jì)變換(stat)

    • 6.1 diamonds 數(shù)據(jù)集

    • 6.2 geom_bar()函數(shù)

    • 6.3 統(tǒng)計(jì)變換

  • 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. 圖形分層語法

    • 9.1 繪圖模板

    • 9.2 如何從頭開始構(gòu)建一個(gè)基本圖形,?

1. 簡介

R 有好幾種繪圖工具,,但 ggplot2 是其中最優(yōu)雅,、功能最全面的一個(gè),。

本章重點(diǎn)討論 tidyverse 的一個(gè)核心 R 包——ggplot2,。關(guān)于tidyverse的介紹詳見

往期推薦



初學(xué)《R數(shù)據(jù)科學(xué)》之——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ù)1ggplot()
- 功能:創(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ù)2geom_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)

  • 如果不想在行或列的維度進(jìn)行分面,,你可以使用 . 來代替變量名。

# 僅在列的維度按cyl(氣缸數(shù))進(jìn)行分面,。
ggplot(data=mpg)+
geom_point(mapping=aes(x=displ,y=hwy))+
facet_grid(.~cyl)

5. 幾何對象

幾何對象是圖中用來表示數(shù)據(jù)的幾何圖形對象,。

  • 條形圖:使用了條形幾何對象;

  • 折線圖:使用了直線幾何對象;

  • 箱線圖:使用了矩形和直線幾何對象。

  • 散點(diǎn)圖:使用點(diǎn)幾何對象,。

要想改變圖中的幾何對象,,需要修改添加在 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.25.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 (010.74)
- y:寬度,單位 mm (058.9)
- z:深度,,單位 mm (031.8)
- depth:全深比 = z / mean(x, y) = 2 * z / (x + y) (4379)
- table:鉆石頂部相對于最寬點(diǎn)的寬度(4395)

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ì)變換的情況如下:

  1. 覆蓋默認(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"
)

  1. 覆蓋從統(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))

  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)statidentity,,故要特別指出,。
fun.min=min, # Stat_summary()用平均值和sd來計(jì)算直線的中點(diǎn)和端點(diǎn),而上圖端點(diǎn)用的是最小值和最大值,,故要重新計(jì)算,。
fun.max=max, # ggplot2 v 3.3.0.已棄用fun.yminfun.ymaxfun.y,,替換為fun.min,、fun.maxfun
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è)數(shù)據(jù)集(如diamonds),然后(通過統(tǒng)計(jì)變換(如stat_count()))將其轉(zhuǎn)換為想要顯示的信息,。

  • 接下來,,可以選擇一個(gè)幾何對象(如條形圖)來表示轉(zhuǎn)換后的數(shù)據(jù)中的每個(gè)觀測值。

  • 然后,,選擇幾何對象的圖形屬性(如fill)來表示數(shù)據(jù)中的變量,,這會(huì)將每個(gè)變量的值映射為圖形屬性的水平。

  • 下一步,,選擇放置幾何對象的坐標(biāo)系,。

這樣就生成了一張完整的圖。但還可以進(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)行了解,。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多