ggplot2的分面類型 大家可能會(huì)好奇為什么進(jìn)行分面?分面有什么作用? 這里可以大聲告訴你,在做報(bào)告和發(fā)表專業(yè)期刊甚至是頂級期刊(Nnature、Science、Cell、PNAS)時(shí)的很多圖形中都用到了分面。它就好比九宮格甚至可以設(shè)置更多圖像,先將數(shù)據(jù)劃分成多個(gè)子集,并將每個(gè)子數(shù)據(jù)集填充繪制到頁面各小圖形中。通常我們繪圖時(shí)用到的分面有兩種類型: 1)facet_wrap -- 封裝類型 生成一個(gè) 1 維的多宮格,然后按行或按列順序添加子圖。具體如下圖: 2)facet_grid -- 網(wǎng)格類型 生成一個(gè) 2 維的多網(wǎng)格,通過行列對應(yīng)不同因子型的變量。具體如下圖: 特別提醒:兩者具體區(qū)別也可以看出,一個(gè)是生成1維的,另一個(gè)是生成2維的。也就是說,如果想要分別用兩個(gè)變量來表征多個(gè)子數(shù)據(jù)集時(shí)可以優(yōu)先考慮用facet_grid函數(shù)來繪圖。當(dāng)然,如果想用facet_wrap函數(shù)來繪制2維也可以,但是繪圖的效果可能不好。接下來,先與大家簡單分享下分面示例: 這里使用R語言自帶的數(shù)據(jù)集:"mpg" 1) 繪制單獨(dú)的面板 -- facet_null ()
2) facet_wrap 單一變量:var ~ .
3) facet_wrap 多變量:var(var1 , var2) 或者 var1~var2
4) facet_grid 一行多列或者是多行一列:. ~ var 或 var ~ .
5) facet_grid 多行多列:. ~ var 或 var ~ .
facet分面設(shè)定更好的坐標(biāo)軸范圍 關(guān)于facet分面其他的一些細(xì)節(jié),在這里我們不贅述了,網(wǎng)上也有很多相關(guān)介紹。今天主要想和大家分享一下有關(guān)facet分面中如何設(shè)定更好的坐標(biāo)軸范圍。該函數(shù)有一個(gè)參數(shù)--scales,它主要作用是可以根據(jù)不同子圖(各分面的數(shù)據(jù)集范圍)對x和y軸進(jìn)行自動(dòng)生成(但是自動(dòng)生成的范圍不一定是我們想要的,如導(dǎo)致圖的比例不美觀等等)。而平時(shí)我們使用的scale_y_continuous都是對一個(gè)圖形背景所有的范圍進(jìn)行設(shè)置,不能很好的解決這個(gè)問題。這里,我們推薦使用geom_blank函數(shù)來完成該功能。 1) 我們先構(gòu)建一個(gè)數(shù)據(jù)集:由于是隨機(jī)構(gòu)建的,可以設(shè)置種子保證每次結(jié)果復(fù)現(xiàn)一致
2) 緊接著把構(gòu)建的數(shù)據(jù)繪制成圖:
這里可以利用?facet_wrap查看相關(guān)函數(shù)的介紹 , scales = "free" 對應(yīng)的介紹也非常詳細(xì)~可以看出來由于圖形比例不當(dāng),導(dǎo)致的圖結(jié)果并不美觀。 3) 調(diào)整圖形坐標(biāo)軸的比例,如果使用單一面板或所有相同比例的數(shù)據(jù)時(shí),通常使用 coord_cartesian 函數(shù)。但是當(dāng)具有不同比例的面板時(shí),這個(gè)效果并不好,它強(qiáng)制所有內(nèi)容都處于相同的比例。結(jié)果如下:
從圖來看,點(diǎn)確實(shí)是聚集起來了,但是各分面都有多余的空間。使得圖看起來不協(xié)調(diào)。 另一種我們還可以選擇使用 expand_limits() 強(qiáng)制各分面從原點(diǎn)開始。使用 scale_y_continuous(expand=c(0,0)) 刪除 y 軸限制的緩沖區(qū)。其中expand 的兩個(gè)值是 c(乘數(shù)緩沖區(qū),加法緩沖區(qū))。通過包含 c(0,0),我們不包含軸刻度上的任何緩沖區(qū)。結(jié)果如下:
從圖來看還是不能很好的解決不同比例的y軸范圍。為了解決這些問題,可以使用 geom_blank,它能夠完美的解決各分面的坐標(biāo)軸范圍問題。首先創(chuàng)建一個(gè)數(shù)據(jù)集,其中包含我們數(shù)據(jù)集中每個(gè)組級別的 y 軸的最小值和最大值。然后使用 geom_blank 將其傳遞給 ggplot 就可以完美解決了。
關(guān)于數(shù)據(jù)集的設(shè)定我們需要考慮幾點(diǎn): 1)group分組的名稱要一一對應(yīng) 2)對應(yīng)y軸的值要有兩個(gè)點(diǎn)(最小值和最大值) 3)要考慮清楚各分面哪個(gè)范圍的圖看起來更加美觀,比例更加協(xié)調(diào) 感興趣的同學(xué)可以通過以下方式與我們溝通、交流和學(xué)習(xí): |
|