ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图
- 介紹ggplot2包
- 使用形狀、顏色和尺寸來對多元數(shù)據(jù)進行可視化
- 用刻面圖比較各組
- 自定義ggplot2圖
19.1 R中的四種圖形系統(tǒng)
- 基礎(chǔ)
- grid
- lattice
- ggplot2(用的較多)
- gghub
需要的R包
- ggpolt2
- gridExtra(可以拼圖)
- car
19.2 ggplot2介紹
library(ggplot2)ggplot(data=mtcars, aes(x=wt, y=mpg)) +geom_point() +labs(, x="Weight", y="Miles Per Gallon")image-20200719172844715ggplot()初始化圖形并且指頂要用到的數(shù)據(jù)來源(mtcars)和變量(wt\mpg)。aes()函數(shù)的功能是指定每個變量扮演的角色(aes代表aesthetics,即如何用視覺形式呈現(xiàn)信息)。
- 變量wt的值映射到沿x軸的距離,變量mpg的值映射到沿y軸的距離。
- ggplot()函數(shù)設(shè)置圖形但沒有自己的視覺輸出。使用一個或多個幾何函數(shù)向圖中添加了幾何對象(簡寫為geom),包括點、線、條、箱線圖和陰影區(qū)域。
- geom_point()函數(shù)在圖形中畫點,創(chuàng)建了一個散點圖。labs()函數(shù)是可選的,可添加注釋(包括軸標簽和標題)。
- 選用geom_point()函數(shù)來設(shè)置點的形狀為三角形(pch=17),點的大小加倍(size=2),并使顏色為藍色(color="blue")。
- geom_smooth()函數(shù)增加了一條“平滑”曲線。這里需要線性擬合(method="lm"),并且產(chǎn)生一條紅色(color="red")虛線(linetype=2),線條尺寸為1(size=1)。
- 默認情況下,平滑的曲線包括在95%的置信區(qū)間(較暗帶)內(nèi)。
ggplot2包提供了分組和小面化的方法,分組是再一個圖形中顯示兩組或多組觀察結(jié)果,小面化是指再單獨并排的圖形上顯示觀察組。ggplot2再定義組和面時使用因子(factor)
示例:
我們可以使用mtcars數(shù)據(jù)集來查看分組和面。首先,將am、vs和cyl變量轉(zhuǎn)化為因子:
rm(list=ls())mtcars$am labels=c("Automatic", "Manual"))mtcars$vs labels=c("V-Engine", "Straight Engine"))mtcars$cyl #繪圖library(ggplot2)ggplot(data=mtcars, aes(x=hp, y=mpg,shape=cyl, color=cyl)) +geom_point(size=3)+facet_grid(am~vs)+labs(, x="Horsepower", y="Miles Per Gallon")包含變速箱類型(自動對手動)和發(fā)動機裝置(V型發(fā)動機與直列式發(fā)動 機)每個組合的分離的散點圖。每個點的顏色和形狀表示該汽車發(fā)動機汽缸的數(shù)量。在本例中,am和vs是刻面變量,cyl是分組變量。
19.3 用幾何函數(shù)指定圖的類型
| geom_bar() | 條形圖 | color、fill、alpha |
| geom_boxplot() | 箱線圖 | color、fill、alpha、notch、width |
| geom_density() | 密度圖 | color、fill、alpha、linetype |
| geom_histogram() | 直方圖 | color、fill、alpha、linetype、binwidth |
| geom_hline() | 水平線 | color、alpha、linetype、size |
| geom_jitter() | 抖動點 | color、size、alpha、shape |
| geom_line() | 線圖 | colorvalpha、linetype、size |
| geom_point() | 散點圖 | color、alpha、shape、size |
| geom_rug() | 地毯圖 | color、side |
| geom_smooth() | 擬合曲線 | method、formula、color、fill、linetype、size |
| geom_text() | 文字注解 | 很多,參見函數(shù)的“幫助” |
| geom_violin() | 小提琴圖 | color、fill、alpha、linetype |
| geom_vline() | 垂線 | color、alpha、linetype、size |
書中描述的大多數(shù)圖形都可以使用表19-2中的幾何函數(shù)創(chuàng)建
ggplot(singer, aes(x=voice.part, y=height)) + geom_boxplot()| color | 對點、線和填充區(qū)域的邊界進行著色 |
| fill | 對填充區(qū)域著色,如條形和密度區(qū)域 |
| alpha | 顏色的透明度,從0(完全透明)到1(不透明)。 |
| linetype | 圖案的線條(1=實線,2=虛線,3=點,4=點破折號,5=長破折號,6=雙破折號) |
| size | 點的尺寸和線的寬度 |
| shape | 點的形狀(和pch一樣,0=開放的方形,1=開放的圓形,2=開放的三角形,等等) |
| position | 繪制諸如條形圖和點等對象的位置。對條形圖來說,"dodge"將分組條形圖并排,"stacked"堆疊分組條形圖,"fill"垂直地堆疊分組條形圖并規(guī)范其高度相等。對于點來說,"jitter"減少點重疊 |
| binwidth | 直方圖的寬度 |
| notch | 表示方塊圖是否應(yīng)為缺口(TRUE/FALSE) |
| sides | 地毯圖的安置("b"=底部,"l"=左部,"t"=頂部,"r"=右部,"bl"=左下部,等等) |
| width | 箱線圖的寬度 |
圖層的疊加是ggplot2的魅力所在
library(ggplot2)data(singer, package="lattice")ggplot(singer, aes(x=voice.part, y=height)) +geom_violin(fill="lightblue") +geom_boxplot(fill="lightgreen", width=.2)19.4 分組
為了理解數(shù)據(jù),在一個圖中畫出兩個或更多組的觀察值通常是很有幫助的。在R中,組通常用分類變量的水平(因子)來定義。
分組是通過ggplot2圖將一個或多個帶有諸如形狀、顏色、填充、尺寸和線類型的視覺特征的分組變量來完成的。ggplot()聲明中的aes()函數(shù)負責分配變量(圖形的視覺特征),所以這是一個分配分組變量的自然的地方
以薪水為例子。變量包括變量包括rank(助理教授、副教授、教授)、sex(女性、男性)、yrs.since.phd(獲得博士學位年數(shù))、yrs.service(工齡)和salary(以美元計的九個月薪水)。
薪水和學術(shù)等級
data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=salary, fill=rank)) +geom_density(alpha=.3)#密度曲線在同一幅圖中畫出了三條密度曲線(每條曲線代表一個學術(shù)等級)并用不同的顏色來區(qū)分。填充的設(shè)置有些透明度(alpha),
博士學位獲得年數(shù)和薪水
ggplot(Salaries, aes(x=yrs.since.phd, y=salary, color=rank,shape=sex)) + geom_point()學術(shù)等級和性別
ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="stack") + labs(stack"')ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="dodge") + labs(dodge"')ggplot(Salaries, aes(x=rank, fill=sex)) +geom_bar(position="fill") + labs(fill"')19.5 刻面
如果組在圖中并排出現(xiàn)而不是重疊為單一的圖形,關(guān)系就是清晰的。我們可以使用facet_wrap()函數(shù)和facet_grid()函數(shù)創(chuàng)建網(wǎng)格圖形
| facet_wrap(~var,ncol=n) | 將每個var水平排列成n列的獨立圖 |
| facet_wrap(~var,nrow=n) | 將每個var水平排列成n行的獨立圖 |
| facet_grid(rowvar~colvar) | rowvar和colvar組合的獨立圖,其中rowvar表示行,colvar表示列 |
| facet_grid(rowvar~.) | 每個rowvar水平的獨立圖,配置成一個單列 |
| facet_grid(.~colvar) | 每個colvar水平的獨立圖,配置成一個單行 |
19.6 添加光滑曲線
可以使用geom_smooth()函數(shù)來添加一系列的平滑曲線和和置信區(qū)域。
| method= | 使用的平滑函數(shù)。允許的值包括lm、glm、smooth、rlm和gam,分別對應(yīng)線性、廣義線性、loess、健壯線性和廣義相加模型。smooth是默認值 |
| formula= | 在光滑函數(shù)中使用的公式。例子包括y~x(默認)y~log(x),y~poly(x,n)表示n次多項式擬合,y~ns(x,n)表示一個具有n個自由度的樣條擬合 |
| se | 繪制置信區(qū)間(TRUE/FALSE)。默認為TRUE |
| level | 使用的置信區(qū)間水平(默認為95%) |
| fullrange | 指定擬合應(yīng)涵蓋全圖(TRUE)或僅僅是數(shù)據(jù)(FALSE)。默認為FALSE |
使用Salaries數(shù)據(jù)集,我們先檢驗博士畢業(yè)年數(shù)和薪水之間的關(guān)系。在這個例子中,我們可以使用帶有95%置信區(qū)間的非參數(shù)光滑曲線(loess)
data(Salaries, package="car")library(ggplot2)ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary)) +geom_smooth() + geom_point()博士畢業(yè)年數(shù)與目前薪水之間的關(guān)系。加上了一個帶有95%置信區(qū)間的光滑 曲線ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary,linetype=sex, shape=sex, color=sex)) +geom_smooth(method=lm, formula=y~poly(x,2),se=FALSE, size=1) +geom_point(size=2)按照性別來擬合一個二次多項式回歸(一個彎曲)
19.7 修改ggplot2圖形的外觀
19.7.1 坐標軸
ggplot2包會在創(chuàng)建圖時自動創(chuàng)建刻度線、刻度標記標簽和坐標軸標簽。它們往往看起來不錯,但是有時我們需要在更大程度上控制它們的外觀。
| scale_x_continuous()和scale_y_continuous() | breaks=指定刻度標記,labels=指定刻度標記標簽,limits=控制要展示的值的范圍 |
| scale_x_discrete()和scale_y_discrete() | breaks=對因子的水平進行放置和排序,labels=指定這些水平的標簽,limits=表示哪些水平應(yīng)該展示 |
| coord_flip() | 顛倒x軸和y軸 |
19.7.2 圖例
有些時候我們需要對圖例進行自定義
標題位置theme()中的legend.position"可能的值有"left"、"top"、"right"(默認值)和"bottom",也可以再圖中給定的位置指定一個二元素向量
data(Salaries,package="car")library(ggplot2)ggplot(data=Salaries, aes(x=rank, y=salary, fill=sex)) + geom_boxplot() + scale_x_discrete(breaks=c("AsstProf", "AssocProf", "Prof"), labels=c("Assistant\nProfessor", "Associate\nProfessor", "Full\nProfessor")) + scale_y_continuous(breaks=c(50000, 100000, 150000, 200000), labels=c("$50K", "$100K", "$150K", "$200K")) + labs(, x="", y="", fill="Gender") + theme(legend.position=c(.1,.8))#圖例的左上角是分別距離左側(cè)邊緣10%和底部邊緣80%的部分19.7.3 標尺
ggplot2包使用標尺把數(shù)據(jù)空間的觀察值映射到可視化的空間中,可以應(yīng)用于連續(xù)的變量以及離散的變量
ggplot(mtcars, aes(x=wt, y=mpg, size=disp)) +geom_point(shape=21, color="black", fill="cornsilk") +labs(x="Weight", y="Miles Per Gallon",, size="Engine\nDisplacement")aes()函數(shù)的參數(shù)size=disp生成連續(xù)型變量disp(發(fā)動機排量)的標尺,并使用它來控制點的尺寸。結(jié)果參見如圖所示的氣泡圖。從該圖中可以看出汽車里程隨重量和發(fā)動機排量的降低而降低。
在這個離散的例子中,可以使用標尺將帶有因子水平的視覺線索(如顏色、形狀、線條類型、尺寸和透明度)關(guān)聯(lián)起來。
data(Salaries, package="car")ggplot(data=Salaries, aes(x=yrs.since.phd, y=salary, color=rank)) +scale_color_manual(values=c("orange", "olivedrab", "navy")) +geom_point(size=2)#設(shè)定各個組別的顏色19.7.4 主題
theme()函數(shù)中的選項可以讓我們調(diào)整字體、背景、顏色和網(wǎng)格線等。主題可以使用一次,也可以保存起來應(yīng)用到多個圖中。
data(Salaries, package="car")library(ggplot2)mytheme axis.title=element_text(face="bold.italic",size=10, color="brown"),axis.text=element_text(face="bold", size=9,color="darkblue"),panel.background=element_rect(fill="white",color="darkblue"),panel.grid.major.y=element_line(color="grey",linetype=1),panel.grid.minor.y=element_line(color="grey",linetype=2),panel.grid.minor.x=element_blank(),legend.position="top")# 設(shè)定主題ggplot(Salaries, aes(x=rank, y=salary, fill=sex)) +geom_boxplot() +labs(, x="Rank", y="Salary") +mytheme主題mytheme指定了圖的標題應(yīng)該為粗斜體的棕色14號字。軸的標題為粗斜體的棕色10號字。坐標軸標簽應(yīng)為加粗的深藍色9號字。畫圖區(qū)域有白色的填充和深藍色的邊框。主水平網(wǎng)格應(yīng)該是灰色的實線,次水平網(wǎng)格應(yīng)該是灰色的虛線;垂直網(wǎng)格不輸出;圖例展示在圖的頂部。theme()函數(shù)給了我們把控最后圖形的控制權(quán)??梢詤⒖糷elp(theme)來查看更多關(guān)于選項的信息。
19.7.5 多重圖
我們使用圖形參數(shù)mfrow和基本函數(shù)layout()把兩個或更多的基本圖放到單個圖形中。同樣,這種方法在ggplot2包中不適用。將多個ggplot2包的圖形放到單個圖形中最簡單的方式是使用gridExtra包中的grid.arrange()函數(shù)。
19.8 保存圖形
我們可以使用1.3.4節(jié)討論的標準方法來保存由ggplot2創(chuàng)建的圖形,但是ggsave()函數(shù)能更方便地保存它。它的選項包括保存哪幅圖形,保存在哪里和以什么形式保存。
myplot ggsave(file="mygraph.png", plot=myplot, width=5, height=4)如果忽略plot=選項,最近創(chuàng)建的圖形會被保存。
ggplot(data=mtcars, aes(x=mpg)) + geom_histogram()ggsave(file="mygraph.pdf")總結(jié)
以上是生活随笔為你收集整理的ggplot2箱式图两两比较_第十九章_使用ggplot2进行高级绘图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序最常用的布局——Flex布局
- 下一篇: Python面试必须要看的15个问题