分面添加額外變量的一種方法是使用圖形屬性,。另一種方法是將圖分割成多個分面,,即可以顯示數(shù)據(jù)子集的子圖。這種方法特別適合添加分類變量,。 library(tidyverse) library(ggplot2) a=mpg#查看mpg 要想通過單個變量對圖進行分面,,可以使用函數(shù)facet_wrap()。其第一個參數(shù)是一個公式,,創(chuàng)建公式的方式是在 ~ 符號后面加一個變量名(這里所說的“公式”是R中的一種數(shù)據(jù)結(jié)構(gòu),,不是數(shù)學意義上的公式)。傳遞facet_wrap()的變量應(yīng)該是離散型的,。 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_wrap(~ class, nrow = 2) 要想通過兩個變量對圖進行分面,,需要在繪圖命令中加入函數(shù) facet_grid()。這個函數(shù)的第一個參數(shù)也是一個公式,,但該公式包含由~隔開的兩個變量名,。 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(drv ~ cyl) 如果不想在行或列的維度進行分面,你可以使用 . 來代替變量名,,例如 + facet_grid(. ~cyl),。 ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + facet_grid(.~ cyl) 幾何對象兩張圖有同樣的 x 變量和 y 變量,而且描述的是同樣的數(shù)據(jù),。但這兩張圖并不一樣,,它們各自使用不同的可視化對象來表示數(shù)據(jù)。在 ggplot2 語法中,,我們稱它們使用了不同的幾何對象,。
要想改變圖中的幾何對象,需要修改添加在 ggplot() 函數(shù)中的幾何對象函數(shù),。舉例來說,,要想繪制出上圖,你可以使用以下代碼: ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy)) ggplot2 中的每個幾何對象函數(shù)都有一個 mapping 參數(shù),。但是,,不是每種圖形屬性都適合每種幾何對象。你可以設(shè)置點的形狀,,但不能設(shè)置線的“形狀”,而可以設(shè)置線的線型,。 geom_smooth() 函數(shù)可以按照不同的線型繪制出不同的曲線,每條曲線對應(yīng)映射到線型的變量的一個唯一值: ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))
和 geom_smooth() 一樣,,很多幾何對象函數(shù)使用單個幾何對象來表示多行數(shù)據(jù)。你可以將這些幾何對象的 group 圖形屬性設(shè)置為一個分類變量,,這樣 ggplot2 就會為這個分類變量的每個唯一值繪制一個獨立的幾何對象,。實際上,只要將一個圖形屬性映射為一個離散變量,,ggplot2就會自動對數(shù)據(jù)進行分組來繪制多個幾何對象,。 ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy)) ggplot(data = mpg) + geom_smooth(mapping = aes(x = displ, y = hwy, group = drv)) ggplot(data = mpg) + geom_smooth( mapping = aes(x = displ, y = hwy, color = drv), show.legend = FALSE ) 要想在同一張圖中顯示多個幾何對象,可以向 ggplot() 函數(shù)中添加多個幾何對象函數(shù): ggplot(data = mpg) + geom_point(mapping = aes(x = displ, y = hwy)) + geom_smooth(mapping = aes(x = displ, y = hwy)) 但是,,這樣代碼就產(chǎn)生了一些重復(fù),。假如你想將 y 軸上的變量從 hwy 改成 cty,那么就要在兩個地方修改這個變量,,但你或許會漏掉一處,。避免這種重復(fù)的方法是將一組映射傳遞給 ggplot() 函數(shù)。ggplot2 會將這些映射作為全局映射應(yīng)用到圖中的每個幾何對象中,。換句話說,,以下代碼將繪制出與上面代碼同樣的圖: ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point() + geom_smooth() 如果將映射放在幾何對象函數(shù)中,那么 ggplot2 會將其看作這個圖層的局部映射,,它將使用這些映射擴展或覆蓋全局映射,, 但僅對該圖層有效。這樣一來,,我們就可以在不同的圖層中顯示不同的圖形屬性: ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = class)) + geom_smooth() 同理,你也可以為不同的圖層指定不同的數(shù)據(jù)。下圖中的平滑曲線表示的只是 mpg 數(shù)據(jù)集的一個子集,,即微型車,。geom_smooth() 函數(shù)中的局部數(shù)據(jù)參數(shù)覆蓋了 ggplot() 函數(shù)中的全局數(shù)據(jù)參數(shù),當然僅對這個圖層有效: ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + geom_point(mapping = aes(color = class)) + geom_smooth( data = filter(mpg, class == "subcompact"), se = FALSE ) 好了,,今天就學到這,。 另外,最近收集了一些很好的資源,,分享給大家,,順便能漲一些粉,主要有
R語言實戰(zhàn)(中文完整版) R數(shù)據(jù)科學(中文完整版) ggplot2:數(shù)據(jù)分析與圖形藝術(shù) 30分鐘學會ggplot2
前期從https:///datapages/ (UCSC Xena)數(shù)據(jù)庫下載的TCGA數(shù)據(jù),,傳到了百度云上備份,。
感興趣的話,轉(zhuǎn)發(fā)朋友圈或者100人以上的微信群,,截圖發(fā)到公眾號,,即可獲取全部資源的百度云鏈接,鏈接7天有效,,希望大家趕緊下載,。你們的支持是我前進的動力,感謝,。 |
|