R語言宏基因組學(xué)統(tǒng)計(jì)分析(第四章)筆記之ggplot2

4.3 ggplot2簡介

4.3.1 ggplot2和圖形語法

ggplot2可以用來創(chuàng)建優(yōu)雅的圖形,由于它的靈活,簡潔和一致的接口,可以提供美麗、可直接用來發(fā)表的圖形,吸引了許多用戶,特別是科研領(lǐng)域的用戶。ggplot2使用grid包來提供一系列的高水平的函數(shù),并將其延伸為圖形語法,即獨(dú)立指定繪圖組件,并將它們組合起來,以構(gòu)建我們想要的任何圖形顯示。
圖形語法包含6個(gè)主要成分:data, transformations, element, scales, guide和 coordinate system。圖層圖形語法源于多層數(shù)據(jù)構(gòu)建圖形的想法。它定義了下表中的圖形組分:data, aesthetic mappings, statistical transformations, geometric objects, position adjustment, scales, coordinate system 和 faceting(數(shù)據(jù)、幾何映射、統(tǒng)計(jì)變換、幾何對象、位置調(diào)整、比例、坐標(biāo)和面)。
數(shù)據(jù)、幾何映射、統(tǒng)計(jì)變換、幾何對象、位置調(diào)整形成一個(gè)圖層,一個(gè)圖可以有多個(gè)圖層。

  • data 用于構(gòu)造一個(gè)具體的圖形,由變量組成,這些變量作為列存儲(chǔ)在數(shù)據(jù)框中。數(shù)據(jù)獨(dú)立于其他組件,可以應(yīng)用多個(gè)數(shù)據(jù)集
  • 映射:映射的目的是將數(shù)據(jù)屬性(通常是數(shù)字或分類值)轉(zhuǎn)換為幾何或視覺屬性;它用于指定幾何屬性的變量(例如,x位置、y位置、顏色、形狀、大小等)
  • Stat:轉(zhuǎn)換數(shù)據(jù),通常通過某種方式(例如,平滑線、回歸線、裝箱或聚合、箱線圖、散點(diǎn)圖等)對數(shù)據(jù)進(jìn)行匯總。stat可以向數(shù)據(jù)集添加新變量。將幾何映射到這些新變量是可能的
  • 幾何體:是指繪制來表示數(shù)據(jù)的幾何對象;每個(gè)geom控制我們創(chuàng)建的打印類型。每個(gè)geom只能顯示特定的幾何圖形(例如,條形圖、線和點(diǎn)等),每個(gè)geom都有默認(rèn)統(tǒng)計(jì),并且每個(gè)統(tǒng)計(jì)都有默認(rèn)的geom
  • 位置調(diào)整:用于調(diào)整圖形上幾何元素的位置以避免相互遮擋,例如在條形圖中,堆疊或回避(并排放置)條形以避免重疊。在散點(diǎn)圖中,隨機(jī)抖動(dòng)點(diǎn)以減少過度繪制
  • 尺度:每個(gè)幾何屬性都有一個(gè)函數(shù),稱為尺度;比例控制從數(shù)據(jù)到幾何屬性的映射,以確保數(shù)據(jù)值對該幾何屬性有效。此外,在統(tǒng)計(jì)變換之前執(zhí)行縮放。
  • 坐標(biāo):將對象的位置映射到繪圖平面上。位置通常由兩個(gè)坐標(biāo)(x,y)指定,但可以是任意數(shù)量的坐標(biāo)。此外,坐標(biāo)變換發(fā)生在統(tǒng)計(jì)變換之后
  • 面處理:在更一般的情節(jié)中稱為條件圖或網(wǎng)格圖。面處理描述了應(yīng)該使用哪些變量來分割數(shù)據(jù),以及如何排列它們??堂媸且粋€(gè)強(qiáng)大的工具,可以研究不同的模式是否相同或不同于條件



    圖形語法的成分可以映射到分層語法的成分:分層語法的一層相當(dāng)于圖形語法的元素;分層語法的尺度相當(dāng)于圖形語法的尺度和指導(dǎo);分層語法的坐標(biāo)系和刻面等價(jià)于圖形語法坐標(biāo)系。然而,圖形語法的翻譯在ggplot2中沒有對應(yīng)關(guān)系(它的作用是由內(nèi)置的R功能發(fā)揮的)。

4.3.2 使用gglot()創(chuàng)建繪圖時(shí)的簡單概念

Ggplot2的算法很簡單:您提供數(shù)據(jù),告訴ggplot2如何將變量映射到幾何,使用什么圖形,它負(fù)責(zé)細(xì)節(jié)。
在ggplot2中,負(fù)責(zé)創(chuàng)建我們在繪圖上感知到的對象。層由四個(gè)部分組成:數(shù)據(jù)幾何映射、統(tǒng)計(jì)變換(STAT)、幾何對象(GEOM)和位置調(diào)整(Wickham 2010)。一個(gè)圖可能有多個(gè)圖層。這些圖層與坐標(biāo)系和變換相結(jié)合,以生成最終的繪圖。以下是一個(gè)情節(jié)生成過程:
將變量映射到幾何->分面數(shù)據(jù)->變換刻度->計(jì)算AESthetics->train scales->比例尺->渲染。

4.3.2.1 不用默認(rèn)從頭開始的全步驟

library(ggplot2) 
ggplot() +
  layer(
    data = iris, mapping = aes(x = Sepal.Width, y = Sepal.Length), 
    geom = "point", stat = "identity", position = "identity"
  )+ scale_y_continuous() +
  scale_x_continuous()  + coord_cartesian()

我們可以看到,單個(gè)圖層指定了數(shù)據(jù)、地圖、幾何、統(tǒng)計(jì)和位置、兩個(gè)連續(xù)的位置比例和一個(gè)笛卡爾坐標(biāo)系。

4.3.2.2 用默認(rèn)智能作圖

完整的規(guī)格非常復(fù)雜,尤其是層是最復(fù)雜的。有兩種方法可以簡化語法語法:一種是智能地使用語法的默認(rèn)值,我們將在這里介紹;另一種是使用qlot()函數(shù),我們將在下一小節(jié)中介紹該函數(shù)。您可以智能地使用以下三種默認(rèn)設(shè)置來簡化代碼:

  • (1)每個(gè)geom都有一個(gè)默認(rèn)的統(tǒng)計(jì)信息(反之亦然),所以我們只需要指定geom或stat中的一個(gè),而不是兩個(gè)都指定。
  • (2)不需要指定笛卡爾坐標(biāo)系,因?yàn)樗悄J(rèn)坐標(biāo)系
  • (3)根據(jù)幾何和變量類型增加默認(rèn)比例。
    例如,對于位置,用線性比例變換連續(xù)值,并將分類值映射到整數(shù);對于顏色,將連續(xù)變量映射到HCL顏色空間中的平滑路徑,將離散變量映射到具有相等亮度和色度的均勻間隔的色調(diào),例如,對于位置,連續(xù)值被映射到整數(shù);對于顏色,連續(xù)變量被映射到HCL顏色空間中的平滑路徑,離散變量被映射到具有相等亮度和色度的均勻分布的色調(diào)。
    因此,我們可以將上述代碼減化如下:
ggplot() +  layer(
  data = iris, mapping = aes(x = Sepal.Width, y = Sepal.Length),
  geom = "point" 
  )
# 我這報(bào)錯(cuò)了,可能不同版本的區(qū)別?
Error: Attempted to create layer with no stat.
Run `rlang::last_error()` to see where the error occurred.

通常,我們可以省略data=和mapping=,而不是在gglot()調(diào)用中指定默認(rèn)數(shù)據(jù)集和映射,還可以在AES(x變量,y變量)中使用基于位置的匹配。我們也可以省略這一層。因此,規(guī)格可以減少如下:

# 這就是我們??吹降拇a的來歷呀
ggplot(iris, aes(Sepal.Width, Sepal.Length)) +  geom_point()

當(dāng)省略層時(shí),geom=“geometry”的規(guī)范將被替換為相應(yīng)的幾何函數(shù),例如,在本例中,geom=“point”將被替換為geom_point()。類似地,stat=“statistics”的規(guī)范將被替換為相應(yīng)的統(tǒng)計(jì)函數(shù),例如,STAT=“Smooth”將被替換為stat_smooth()。
圖層中指定的任何效果都將覆蓋默認(rèn)設(shè)置。同樣,如果在圖層中指定了數(shù)據(jù)集,它將替代打印默認(rèn)值。以下代碼使用scale_x_log10()和scale_y_log10()函數(shù)進(jìn)行對數(shù)轉(zhuǎn)換,覆蓋了默認(rèn)的線性變換,這些線性變換是通過scale_y_continous()和scale_x_Continuity()指定的。

ggplot(iris, aes(Sepal.Width, Sepal.Length)) + geom_point() +
stat_smooth(method = lm) +
scale_x_log10() +
 scale_y_log10()

如果不使用默認(rèn),代碼將會(huì)如此冗長:

# 發(fā)現(xiàn)這個(gè)代碼也報(bào)錯(cuò),可能被廢棄了,或者我版本低?
ggplot() +  layer(
  data = iris, mapping = aes(x = Sepal.Width, y = Sepal.Length),
  geom = "point", stat = "identity", position = "identity" )+
  layer(
    data = iris, mapping = aes(x = Sepal.Width, y = Sepal.Length), geom = "smooth", position = "identity",
    stat = "smooth", method = lm)+
  scale_y_log10() +
  scale_x_log10() +
  coord_cartesian()

(Wickham 2010)論文中解釋了默認(rèn)優(yōu)先級的概念。本書第5章中解釋了如何逐層構(gòu)建圖。

4.3.2.3 通過使用qlot()減少鍵入語法代碼的數(shù)量

在ggplot2中,有兩個(gè)主要的高級函數(shù)用于創(chuàng)建繪圖:qlot()和gglot()。使用qlot(),以一次創(chuàng)建所有圖的方式創(chuàng)建一個(gè)圖;使用gglot(),按塊和層函數(shù)創(chuàng)建一個(gè)圖。
Ggplot2補(bǔ)充qlot()的原因是為了減少所需的打字量。因?yàn)榧词刮覀兪褂昧嗽S多缺省值,ggplot2的顯式語法語法也相當(dāng)冗長,這使得快速嘗試不同的繪圖變得困難。它還模仿plot()函數(shù)的語法,使ggplot2對于熟悉Base R圖形的用戶更容易使用。例如,如果對上面的繪圖使用qlot(),則代碼為:

qplot(Sepal.Width, Sepal.Length, data = iris,  geom = c("point", "smooth"),
       method = "lm", log = "xy")
# 報(bào)了個(gè)警告
`geom_smooth()` using formula 'y ~ x'
Warning message:
Ignoring unknown parameters: method 

盡管qlot()對于熟悉BASE R圖形的用戶來說是快速而方便的,但它的局限性是顯而易見的:因?yàn)?strong>qlot()函數(shù)假設(shè)多個(gè)層將使用相同的數(shù)據(jù)和幾何映射,所以方法參數(shù)沒有顯式的層可供應(yīng)用,并且特定的數(shù)據(jù)轉(zhuǎn)換、繪圖布局定義和控制也受到限制。因此,在這種情況下,需要更高級的gglot()函數(shù)。

4.3.3 使用ggplot()繪圖

4.3.3.1 創(chuàng)建一個(gè)層疊的圖

ggplot2語法的第一個(gè)明顯特性是分層,這意味著一個(gè)圖至少由一個(gè)層創(chuàng)建,并通過使用gglot()函數(shù)向現(xiàn)有圖添加更多玩家來增強(qiáng)。層結(jié)合了數(shù)據(jù)、美觀映射、幾何對象(Geom)、統(tǒng)計(jì)(統(tǒng)計(jì)變換)和位置調(diào)整。層由geom(幾何對象)組成,因此ggplot2中的層也稱為geom。因此,在ggplot2中,繪圖實(shí)際上是由geom(例如geom_point())創(chuàng)建的,并由更多geom(例如geom_mooth()等)增強(qiáng)。一個(gè)幾何圖形表示一層地塊。
ggplot2的第二個(gè)顯著特性是它使用數(shù)據(jù)幀,而不是單獨(dú)的向量。因此,在使用該包創(chuàng)建繪圖之前,如果數(shù)據(jù)是矢量,則需要將數(shù)據(jù)轉(zhuǎn)換為數(shù)據(jù)幀。提供給gglot()本身或提供給各個(gè)geom以創(chuàng)建繪圖的所有數(shù)據(jù)都包含在數(shù)據(jù)幀中。

  • 第一步:為了初始化一個(gè)基本的gglot,我們從gglot()開始,創(chuàng)建一個(gè)包含數(shù)據(jù)和幾何映射的Plot對象,我們將圖形對象命名為p。
# 這個(gè)花的數(shù)據(jù)我們應(yīng)該想當(dāng)熟悉了,這是我們最廣泛使用的數(shù)據(jù)示例,來自R自帶
head(iris)
#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa
p <- ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length))
p
空圖

應(yīng)該在aes()函數(shù)中指定數(shù)據(jù)幀中需要繪圖的任何信息。在本例中,我們通過aes()函數(shù)實(shí)現(xiàn)美學(xué)映射:分別指定x和y變量。但是,只繪制了一個(gè)空白的GGPlot。因?yàn)榈侥壳盀橹?,我們只告訴gglot()應(yīng)該使用什么數(shù)據(jù)集,以及應(yīng)該為x、y軸和顏色使用哪些列。但是我們還沒有明確要求它畫任何點(diǎn)或者一條線。要實(shí)際繪制散點(diǎn)圖或折線圖,我們必須使用geom圖層顯式地請求gglot()。對象p是類ggPlot的R S3對象,由數(shù)據(jù)和其他包含關(guān)于該圖的信息的組件組成。我們可以使用Summary()函數(shù)訪問信息的詳細(xì)信息,以跟蹤確切使用了哪些數(shù)據(jù)以及變量是如何映射的。

summary(p)
# 150行,5列,就是上面的那個(gè)樣式的數(shù)據(jù)
# data: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width,
  Species [150x5]
mapping:  x = ~Sepal.Width, y = ~Sepal.Length
faceting: <ggproto object: Class FacetNull, Facet, gg>
    compute_layout: function
  • 第二步,使用幾何圖層geom_point()添加點(diǎn),畫一個(gè)散點(diǎn)圖p
    使用數(shù)據(jù)、幾何映射和幾何圖形實(shí)現(xiàn)了ggplot2中的基本繪圖。我們已經(jīng)有了數(shù)據(jù)、美觀地圖的組件,需要添加的組件是散點(diǎn)圖圖層??梢允褂?strong>+運(yùn)算符添加圖層,后跟定義帶點(diǎn)散點(diǎn)圖的函數(shù):geom_point()
p1 <- p + geom_point()
p1
summary(p1)
# 前面一樣,省略 
-----------------------------------
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 
第二步,加點(diǎn)
  • 第三步,為了繪制具有平滑曲線的散點(diǎn)圖,我們在上一個(gè)plot對象中添加了一個(gè)名為geom_smooth()的附加幾何層。
    對于這個(gè)圖,我們將該方法設(shè)置為lm(線性模型的縮寫)來繪制最佳擬合線
# Add smoothing geom (layer2)
p2 <- p1 + geom_smooth(method="lm")
p2
summary(p2)
# data: Sepal.Length, Sepal.Width, Petal.Length, Petal.Width,
  Species [150x5]
mapping:  x = ~Sepal.Width, y = ~Sepal.Length
faceting: <ggproto object: Class FacetNull, Facet, gg>
-----------------------------------
geom_point: na.rm = FALSE
stat_identity: na.rm = FALSE
position_identity 

geom_smooth: na.rm = FALSE, orientation = NA, se = TRUE, flipped_aes = FALSE
stat_smooth: na.rm = FALSE, orientation = NA, se = TRUE, method = lm
position_identity

輸出顯示,在plot對象中添加了一個(gè)附加層,該層使用線性模型進(jìn)行擬合。曲線也有置信帶,我們可以設(shè)置se=FALSE來關(guān)閉置信帶。

# 設(shè)置se=FALSE以關(guān)閉置信區(qū)間
p1+geom_smooth(method=“l(fā)m”,se=FALSE)
# `geom_smooth()` using formula 'y ~ x'

4.3.3.2 使用比例來改變幾何圖層的美學(xué)效果

從數(shù)據(jù)到美學(xué)屬性的映射由比例函數(shù)控制,例如在4.3.2.1,軸中x-y位置的scale_y_continuous()和scale_x_continuous()。尺度函數(shù)既可用于連續(xù)變量,也可用于分類變量。例如,在連續(xù)情況下,用刻度填充直方圖或密度圖;在離散情況下,比例用于填充直方圖或條形圖,或者在映射顏色、大小或形狀時(shí)用于散點(diǎn)圖。
我們需要知道,映射到變量的美學(xué)屬性取決于所使用的geom()函數(shù)。因此,通過具體說明各幾何層的參數(shù),可以改變審美屬性。在這種情況下,我們改變了最適合的點(diǎn)的顏色、大小和線條的顏色。
更改顏色的另一個(gè)重要應(yīng)用是將不同顏色映射到源數(shù)據(jù)集中的類別變量的不同級別。例如,在微生物群落研究中,我們經(jīng)常使用不同的顏色來呈現(xiàn)不同的實(shí)驗(yàn)組或條件。由于類別變量位于源數(shù)據(jù)集中,因此必須在aes()函數(shù)中指定它

p3 <- ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) + 
  #Add scatterplot geom (layer1)
   geom_point(col="blue", size=3) +
   #Add smoothing geom (layer2)
   geom_smooth(method="lm",col="red",size=2) 
p3
p4 <- ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) +
   #Add scatterplot geom (layer1)
   geom_point(aes(col=Species), size=3) +
   #Add smoothing geom (layer2)
  geom_smooth(method="lm",col="red",size=2) 
p4


我們可以看到,由于使用aes(col=Species),散點(diǎn)圖中的點(diǎn)根據(jù)其所屬物種呈現(xiàn)不同的顏色。實(shí)際上,在ggplot2中,除了顏色之外,我們還可以使用大小、形狀、筆劃(邊界的厚度)和填充(填充顏色)來區(qū)分適當(dāng)繪圖中的分組

4.3.3.3 使用坐標(biāo)系統(tǒng)來調(diào)節(jié)和限制X軸和Y軸

坐標(biāo)系的用途是在計(jì)算機(jī)屏幕上調(diào)整從坐標(biāo)到二維平面的映射。在ggplot2中可用的不同坐標(biāo)系中,笛卡爾坐標(biāo)系和極坐標(biāo)系是最常用的坐標(biāo)系。每個(gè)坐標(biāo)系都有相關(guān)的功能。例如,對于笛卡爾坐標(biāo)系,坐標(biāo)函數(shù)包括:coord_cartesian(xlim,ylim)、coord_flip()和coord_fixed(ratio,xlim,ylim);對于極坐標(biāo),通常使用函數(shù)coord_polar(θ,起始,方向)。我們可以使用這些函數(shù)及其相應(yīng)的參數(shù)來調(diào)整要在繪圖中顯示的屬性。這里我們說明如何使用coord_cartesian()的參數(shù)xlim和ylim分別調(diào)整X軸和Y軸的極限。
在下面的代碼中,我們創(chuàng)建一個(gè)新的plot對象p5,并使用coord_cartesian()更改X和Y軸的限制以放大到感興趣的區(qū)域。

p5 <- p4 + coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) # zooms in 
plot(p5)

4.3.3.4 添加標(biāo)簽圖層以更改標(biāo)題和軸標(biāo)簽

默認(rèn)情況下,由ggplot2創(chuàng)建的繪圖沒有任何標(biāo)題,并且?guī)в信c繪圖中使用的變量名相對應(yīng)的軸標(biāo)簽。但是,在某些情況下,例如出版物,我們可能希望將標(biāo)題添加到繪圖中,也可能希望更改X軸和Y軸標(biāo)簽。這可以通過使用labs()函數(shù)來完成,我們可以使用title、x和y參數(shù)指定軸和標(biāo)題,或者使用特定函數(shù)ggtitle()來更改標(biāo)題,使用xlab()和ylab()來更改軸標(biāo)簽。

# 以下兩圖同樣的效果
p6 <- p5 + labs(title="Sepal width vs sepal length", subtitle="Using iris dataset", y="Length of Sepal", x="Width of Sepal")
p6
p7 <-p5 + ggtitle("Sepal width vs sepal length", subtitle="Using iris dataset") + ylab("Length of Sepal") + xlab("Width of Sepal")
p7

到目前為止,代碼整體如下;

library(ggplot2)
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) +
  geom_point(aes(col=Species), size=3) +
  geom_smooth(method="lm",col="red",size=2) +
  coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) +
  labs(title="Sepal width vs sepal length", subtitle="Using iris dataset",
         y="Length of Sepal", x="Width of Sepal")

4.3.3.5 使用刻面檢測不同條件下的模式

刻面是一個(gè)強(qiáng)大的工具,可以用來研究不同條件下的模式是相同的還是不同的。刻面是在一個(gè)圖中繪制多個(gè)圖形。faceting的功能類似于lattice包中的panel。它經(jīng)常出現(xiàn)在微生物組學(xué)研究的出版物上。在ggplot2中,刻面可以通過兩種主要方式執(zhí)行:網(wǎng)格刻面和包裹刻面。

使用facet_grid(公式)在柵格中繪制多個(gè)圖

數(shù)據(jù)根據(jù)兩個(gè)或多個(gè)變量分成亞組,facet_grid(公式)函數(shù)用來生成grid faceting。公式可以是xy,這表示將繪圖分割成變量x的每個(gè)值的一行和變量y的每個(gè)值的一列。實(shí)現(xiàn)facet_grid(xy)函數(shù)將生成一個(gè)矩陣,其中的行和列由x和y的可能組合組成。公式可以是x.,它用于按行分割繪圖;實(shí)現(xiàn)facet_grid(x.)。函數(shù)按行拆分具有方向的繪圖。公式也可以是.y,用于按列拆分繪圖;實(shí)現(xiàn)facet_grid(.y)函數(shù)可以按列拆分具有方向的繪圖。我們舉例說明了facet_grid(x.)。和facet_grid(.y)網(wǎng)格分面,分別使用來自iris數(shù)據(jù)集的萼片寬度與萼片長度的先前散點(diǎn)圖。

#Spliting plots by rows
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) + 
   geom_point(aes(col=Species), size=3) +
   geom_smooth(method="lm",col="red",size=2) +
   coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) +
   # Add Facet Grid
   facet_grid(Species ~.)
#Spliting plots by columns
  ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length))  + 
  geom_point(aes(col=Species), size=3) +
   geom_smooth(method="lm",col="red",size=2) +
  coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) +
  # Add Facet Grid
   facet_grid(.~ Species)

如果添加margin = TRUE的選項(xiàng),會(huì)多一個(gè)所有數(shù)據(jù)的圖。

 ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length))  + 
   geom_point(aes(col=Species), size=3) +
   geom_smooth(method="lm",col="red",size=2) +
   coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) +
   # Add Facet Grid
   facet_grid(.~ Species, margin=TRUE)


如果我們想要基于兩個(gè)或更多變量來分割曲線圖,我們需要對所有這些變量執(zhí)行刻面。例如,公式.y+z(facet_grid(.y+z))對兩個(gè)變量執(zhí)行刻面,兩個(gè)變量都按列顯示,繪圖將基于一個(gè)變量與另一個(gè)變量的級別并排顯示。這種可視化使得兩個(gè)分類變量的比較非常有效。在這個(gè)公式中,我們可以看到使用+運(yùn)算符將附加變量z加到y(tǒng)上。

使用facet_wrap(公式)將一大系列繪圖分解為多個(gè)小繪圖

wrap刻面將一系列大繪圖生成單個(gè)類別的多個(gè)小繪圖。此功能使包裝分面特別適用于對多個(gè)級別的類別變量的分面組合進(jìn)行分面。要執(zhí)行WRAP刻面,我們使用facet_wrap(FORMULA)函數(shù)??堂孀兞靠梢砸詤?shù)的形式列出,形式為Facet_wrap(xy+z)。符號左邊的變量形成行,而右邊的變量形成列。Facet_wrap(x~.)的語法。用于在行中僅按x拆分繪圖,并包括繪圖中的所有其他子集。
與前面一個(gè)函數(shù)的區(qū)別是,facet_wrap(FORMULA)可以選擇網(wǎng)格中的行數(shù)和列數(shù)。我們可以分別使用nrow和ncol參數(shù)指定它們。

 #Facet Wrap
 #Splitting plots by columns
ggplot(iris, aes(x=Sepal.Width, y=Sepal.Length)) + 
  geom_point(aes(col=Species), size=3) +
  geom_smooth(method="lm",col="red",size=2) +
  coord_cartesian(xlim=c(2.2,4.2), ylim=c(4, 7)) +
  #Add Facet Wrap
  facet_wrap(~ Species, nrow=2)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容