騰訊云鏡像:
options("repos" = c(CRAN="http://mirrors.cloud.tencent.com/CRAN/"))
創(chuàng)建ggplot圖形
繪圖模板:
ggplot(data = <DATA>) +
<GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))
ggplot()函數(shù)創(chuàng)建一個坐標系,可以在上面添加圖層。第一個data參數(shù)表示要使用的數(shù)據(jù)集。geom_point()函數(shù)表示向圖中添加一個點層,也就是創(chuàng)建一個散點圖,ggplot2中包含多種幾何對象作圖函數(shù),每種函數(shù)都可以向初始坐標系中添加不同類型的圖層。每個幾何對象函數(shù)都有一個mapping參數(shù),這個參數(shù)定義了如何將數(shù)據(jù)集中的變量映射為圖形屬性。mapping參數(shù)總是和aes()函數(shù)成對出現(xiàn),aes()函數(shù)的x參數(shù)和y參數(shù)分類指定映射到x軸的變量與映射到y(tǒng)軸的變量,它會在data參數(shù)中尋找所指定的映射變量。
圖形屬性映射
圖形屬性是圖中對象的可視化屬性,包括數(shù)據(jù)點的大小,形狀,顏色等,通過改變圖形屬性的值能以不同的方式來顯示數(shù)據(jù)點。例如:向二維散點圖中添加第三個變量,將其映射為圖形屬性。
color屬性
size屬性
alpha屬性
shape屬性
注:只能處理6個一類的分類變量,多出的變量值不會顯示在圖形中。
pch,fill參數(shù)
pch參數(shù)用于控制點的形狀,有如下形狀:
有的形狀相同比如0,15,22都是正方形。形狀之間的區(qū)別在于其顏色不同,而控制其顏色的參數(shù)有color和fill兩個??招男螤睿?-14)的邊界顏色由color決定;實行形狀(15-20)的填充顏色由color決定;填充形狀(21-24)的邊界顏色由color決定,填充顏色由fill決定。
分面
添加額外變量的一種方法是使用圖形屬性,另一種方法是將圖形分割成多個分面,即可以顯示數(shù)據(jù)子集的子圖。
facet_wrap()函數(shù)
facet_wrap()函數(shù)可以用于對單個變量進行分面,傳遞給facet_wrap()的變量應該是離散型的。
facet_grid()函數(shù)
facet_grid()函數(shù)可以對兩個變量進行分面,這個函數(shù)第一個參數(shù)也是一個公式,但該公式包含由~隔開的兩個變量名。如果不想在行或列的維度進行分面,你可以使用 . 來代替變量名,例如 + facet_grid(. ~cyl)。
幾何對象
幾何對象是圖中用來表示數(shù)據(jù)的幾何圖形對象。我們經(jīng)常根據(jù)圖中使用的幾何對象類型l唉描述相應的圖。想要改變圖中的幾何對象,需要修改添加在ggplot()函數(shù)中的幾何對象函數(shù)。
geom_point()
geom_smoonth()
ggplot2中的每個幾何對象函數(shù)都有一個mapping參數(shù),但是不是所有的圖形屬性都適合每種幾何對象。比如可以設(shè)置點的形狀,不能設(shè)置線的形狀,但是可以設(shè)置線的線型。
geom_smooth() 函數(shù)可以按照不同的線型繪制出不同的曲線,每條曲線對應映射到線型的變量的一個唯一值:
平滑曲線+散點圖:
gplot2 提供了 30 多種幾何對象,其擴展包甚至提供了更多(可以在 https://www.ggplot2-exts.org 查看更多樣例)。如果想全面地了解這些對象,最好的方式是學習 ggplot2 速查表(參見 http://rstudio.com/cheatsheets)。如果想掌握更多關(guān)于某個幾何對象的知識,那么可以使用幫助,如 ?geom_smooth。
group圖形屬性
和 geom_smooth() 一樣,很多幾何對象函數(shù)使用單個幾何對象來表示多行數(shù)據(jù)。你可以將這些幾何對象的 group 圖形屬性設(shè)置為一個分類變量,這樣 ggplot2 就會為這個分類變量的每個唯一值繪制一個獨立的幾何對象。這是一個非常方便的屬性,因為按照圖形屬性的這種分組不用添加圖例,也不用為幾何對象添加區(qū)分特征:(沒有特色,不建議使用)
多個幾何對象
要想在同一張圖中顯示多個幾何對象,可以向 ggplot() 函數(shù)中添加多個幾何對象函數(shù):
添加多個幾何對象函數(shù)的方法會使代碼產(chǎn)生重復,如果需要修改的時候工作量會更大且容易出錯,避免這種重復的方法是將一組映射傳遞給 ggplot() 函數(shù)。 ggplot2 會將這些映射作為全局映射應用到圖中的每個幾何對象中。
如果將映射放在幾何對象函數(shù)中,那么 ggplot2 會將其看作這個圖層的局部映射,它將使用這些映射擴展或覆蓋全局映射,但僅對該圖層有效。
同理,也可以為不同的圖層指定不同的數(shù)據(jù)。se=TRUE顯示置信區(qū)間,F(xiàn)ALSE不顯示置信區(qū)間。
統(tǒng)計變換
? 條形圖、直方圖和頻率多邊形圖可以對數(shù)據(jù)進行分箱,然后繪制出分箱數(shù)量和落在每個分箱的數(shù)據(jù)點的數(shù)量。
? 平滑曲線會為數(shù)據(jù)擬合一個模型,然后繪制出模型預測值。
? 箱線圖可以計算出數(shù)據(jù)分布的多種摘要統(tǒng)計量,并顯示一個特殊形式的箱體。
繪圖時用來計算新數(shù)據(jù)的算法稱為 stat(statistical transformation, 統(tǒng)計變換)。
下圖描述了geom_bar() 函數(shù)的統(tǒng)計變換過程:
每個幾何對象函數(shù)都有一個默認統(tǒng)計變換,每個統(tǒng)計變換函數(shù)都有一個默認幾何對象,因此幾何對象函數(shù)和統(tǒng)計變換函數(shù)可以互換使用。例如,可以使用 stat_count()替換 geom_bar() 來重新生成前面那張圖:
stat_summary()
stat_summary()函數(shù)可以對計算得出的某些摘要進行強調(diào)。
- fun.y 表示指定對y的匯總函數(shù),同樣是輸入數(shù)字向量,返回單個數(shù)字,這里的y通常會被分組,匯總后是每組返回1個數(shù)字
- fun.ymin 表示取y的最小值,輸入數(shù)字向量,每組返回1個數(shù)字
-
fun.ymax 表示取y的最大值,輸入數(shù)字向量,每組返回1個數(shù)字
位置調(diào)整
fill圖形屬性可以用于為條形圖上色
position參數(shù)
position參數(shù)的功能是對圖形進行位置調(diào)整,可選參數(shù):identity,fill,dodge,jitter等。
identity
當不對position進行指定時,默認為identity,采用堆疊式:
fill
百分式:
dodge
分離式:
jitter
過繪制:繪制散點圖是,當繪制的點很多時,可能會出現(xiàn)同一個位置出現(xiàn)點重復而導致繪制出來的三點數(shù)量與真實的點的數(shù)量不匹配的情況。
結(jié)果過繪制的問題可以通過講position設(shè)置為jitter,即添加擾動解決:
因為這種操作的用處非常大,所以 ggplot2 提供了 geom_point(position = "jitter") 的一種快速實現(xiàn)方式: geom_jitter()。
坐標系
坐標系可能是 ggplot2 中最復雜的部分。默認的坐標系是笛卡兒直角坐標系,可以通過其獨立作用的 x 坐標和 y 坐標找到每個數(shù)據(jù)點。
coord_flip()
coord_flip() 函數(shù)可以交換 x 軸和 y 軸。該方法對于x軸標簽過于密集而導致相互重合用較好的使用價值。
coord_quickmap()
coord_quickmap() 函數(shù)可以為地圖設(shè)置合適的縱橫比。當使用 ggplot2 繪制空間數(shù)據(jù)時,
這個函數(shù)特別重要(遺憾的是本書不涉及空間數(shù)據(jù)):
coord_polar()
coord_polar() 函數(shù)使用極坐標系。
圖形分層語法
ggplot(data = <DATA>) + #數(shù)據(jù)集
<GEOM_FUNCTION>( #幾何對象
mapping = aes(<MAPPINGS>), #映射
stat = <STAT>, #統(tǒng)計變換
position = <POSITION> #位置調(diào)整
) +
<COORDINATE_FUNCTION> + #坐標系
<FACET_FUNCTION> #分面
ggplot2使用隨記:
theme(panel.grid =element_blank()) + ## 刪去網(wǎng)格線
theme(axis.text = element_blank()) ## 刪去所有刻度標簽
theme(axis.text.y = element_blank()) ## 設(shè)置 axis.text.y 則只刪去 Y 軸的刻度標簽,X 軸同理。
scale_x_discrete(position = "top") #設(shè)置x軸的位置在頂部