前面所有國家的圖包含了過多的曲線,?使得圖形表現(xiàn)得很擁擠池磁。?可以將一個作圖區(qū)域拆分成若干個小塊,?稱為小圖(facet)楷兽,?按照某一個或兩個分類變量的不同值將數(shù)據(jù)分為若干個子集框仔,?每個數(shù)據(jù)子集分別在小圖上作圖。 對于上面的例子拄养,?可以將每個大洲的圖形分別放置在一個小圖上离斩。?小圖不是一種變量映射银舱,?而是一種圖形擺放方法,?所以不設(shè)置在aes()函數(shù)內(nèi)跛梗,?而是用facet_wrap()函數(shù)規(guī)定寻馏。?這種功能與group映射的功能有些重復(fù),?所以有時需要與group映射配合使用核偿,?有時則不需要诚欠。?程序如:
p<- ggplot(data = gapminder,mapping=aes(x=year, y=lifeExp,group=country))p+ geom_line() + facet_wrap(~ continent)
區(qū)分不同小圖的標(biāo)簽寫在每個小圖的上方。?可以用facet_wrap()參數(shù)strip_position和參數(shù)switch調(diào)整標(biāo)簽的上下左右漾岳。 小圖之間默認(rèn)公用了橫坐標(biāo)和縱坐標(biāo)且坐標(biāo)范圍保持一致轰绵。?如果不保持一致,?讀者可能會有誤解尼荆。?但是x軸或y軸映射為分類變量且不同小圖的分類完全不同時左腔,?可以令各小圖中該軸的取值不統(tǒng)一。?facet_wrap()選項scales默認(rèn)為"fixed"捅儒,?即所有小圖的x軸液样、y軸都范圍一致,?取"free_x"則允許各小圖的x軸不統(tǒng)一巧还,?"free_y"允許各小圖的y軸不統(tǒng)一鞭莽,?"free"允許各小圖的x軸和y軸都不統(tǒng)一。
在facet_wrap()中可以用ncol參數(shù)指定小圖的列數(shù)麸祷,?用nrow指定小圖的行數(shù)澎怒。?各個小圖的次序應(yīng)該設(shè)定為一定的合理次序犬辰,?比如用來分類的變量本身有序谱俭,?或者令各小圖中的數(shù)據(jù)值有一定的增減次序。 下面的程序?qū)⑶€顏色變淺斤程,?對每個大洲增加了擬合曲線荸恕,?增加了適當(dāng)?shù)臉?biāo)題和坐標(biāo)軸標(biāo)簽。?注意死相,這時不能使用統(tǒng)一的group?=?country映射融求,?否則擬合曲線就是對每個國家都單獨有一條擬合曲線,?而不是每幅小圖中僅有一條擬合曲線算撮。?辦法是僅在geom_line()中給出group?=?country的映射生宛,?但在geom_smooth()中則不用group維。?程序如下:
p<-ggplot(data=gapminder,mapping=aes(x=year,y=lifeExp))p+geom_line(mapping=aes(group=country),color="gray70") +geom_smooth(method="loess",color="cyan",se=FALSE,size=1.1)+facet_wrap(~continent,ncol=2)+labs(x="年份",y="期望壽命",title="五個大洲各國期望壽命變化趨勢"? ? )
## `geom_smooth()` using formula 'y ~ x'
注意group?=?country的設(shè)置從ggplot()函數(shù)中轉(zhuǎn)移到了geom_line()函數(shù)中肮柜,?否則就意味著擬合線也需要按照國家分組陷舅,?而不是按大洲分組。 facet_wrap()主要適用于按照一個分類變量的值將不同觀測在不同小圖中表現(xiàn)审洞,?可以人為指定小圖的行數(shù)和列數(shù)莱睁。?如果需要按照兩個分類變量交叉分組分配小圖待讳,?可以用facet_grid()函數(shù)。 例如仰剿,?對gss_sm數(shù)據(jù)集创淡,作小孩個數(shù)對年齡的散點圖:
p<-ggplot(data=gss_sm,mapping=aes(x=age,y=childs))p+geom_point(alpha=0.2)
## Warning message:## Removed 18 rows containing missing values (geom_point).
有過多的重疊點。?將觀測按照性別(sex)和種族(race)交叉分組南吮,?分配到不同的小圖上:
p+ geom_point(alpha =0.2) +facet_grid(sex~ race)
## Warning message:## Removed 18 rows containing missing values (geom_point).
交叉分組時作小圖時琳彩,?sex?~?race這種寫法使得不同性別對應(yīng)到不同行,?不同種族對應(yīng)到不同列部凑。?在圖形中增加擬合曲線:
p+ geom_point(alpha =0.2) +? geom_smooth() +facet_grid(sex~ race)
## `geom_smooth()` using method = 'gam' and formula 'y ~ s(x, bs = "cs")'## Warning messages:## 1: Removed 18 rows containing non-finite values (stat_smooth). ##?2:?Removed?18?rows?containing?missing?values?(geom_point).?
這里雖然沒有映射group維露乏,?但還是按性別和種族對數(shù)據(jù)集分成了6個子集,?每個小圖中僅有一個自己的數(shù)據(jù)涂邀。