vlambda博客
学习文章列表

R语言入门之箱线图(重要内容)

箱线图


    在科研工作中,箱线图是一种常用且重要的统计图。在R语言里我们可以针对单一变量绘制箱线图,也可以针对分组后的变量绘制。其中主要的函数是boxplot(x, data=),这里x是一个公式,参数data=则代表提供绘图数据的数据框。常用的公式是y~group,这里group是用来进行分组的变量,y是纵坐标的数据,这样便可以对分组变量绘制出箱线图了。除此之外,如果添加参数varwidth=TRUE,那么箱线图的宽度便会与样本量的平方根成正比。另外参数horizontal=TRUE则可以使横纵坐标颠倒过来。



1. 绘制简单箱线图

# 针对mtcars数据集的mpg和cyl变量绘制箱线图boxplot(mpg~cyl,data=mtcars, main="Car Milage Data",    xlab="Number of Cylinders", ylab="Miles Per Gallon"


    上面的函数将汽车按照气缸数(cyl)分组后绘制每加仑英里数(mpg)的箱线图,从图中可以看出来,cyl大的汽车,mpg偏小。



2. 绘制带V形切迹的箱线图(Notched boxplot)

# 利用ToothGrowth绘制带有V型切迹的箱线图(notched boxplot)# 给箱线图添加颜色boxplot(len~supp*dose, data=ToothGrowth, notch=TRUE,  col=(c("gold","darkgreen")),  main="Tooth Growth", xlab="Suppliment and Dose"


    相较于上一幅图,这里主要添加了notch=TRUE参数来绘制V型切迹,添加col=参数来给不同组别添加颜色。需要注意的是这里所使用的公式len~supp*dose,这么做的目的其实是要观察补充元素和剂量交互作用之间的差异,而不是观察单一变量的作用。

    在V型切迹箱线图中,如果切迹之间不重叠,这说明两组数据之间有较大的差异。从图中我们可以看到当剂量在0.5或者1的情况下,使用不同的补充元素会对牙齿生长产生不同的影响,而当剂量达到2时,这种差异便几乎消失了。这也提示当达到足够剂量,不同补充元素种类导致的牙齿生长差异便没有那么明显。


3. 关于箱线图的其它选项

 在“sfsmisc”包中,boxplot.matrix()函数可以针对矩阵的行元素绘制箱线图(传统箱线图是用列元素绘制的),而“gplots”包里的boxplot.n()函数则可以注释上样本量信息,“Rlab”包里的bplot()则提供更多箱线图的绘制选项,在这里就不一一赘述了,感兴趣的可以自己学习。



4. 小提琴图

小提琴图融合了箱线图和核密度(kernel density)图的特征,可以使用“vioplot”包的vioplot()函数来绘制。


# 绘制小提琴图library(vioplot) #加载包(加载之前需要先安装)x1 <- mtcars$mpg[mtcars$cyl==4] #提取气缸数为4的mpg数据x2 <- mtcars$mpg[mtcars$cyl==6] #提取气缸数为6的mpg数据x3 <- mtcars$mpg[mtcars$cyl==8] #提取气缸数为8的mpg数据vioplot(x1, x2, x3, names=c("4 cyl", "6 cyl", "8 cyl"),  col="gold") #绘制小提琴图title("Violin Plots of Miles Per Gallon"#添加标题

    通过上面的代码可以知道绘制出一幅这样的箱线图需要先将组别分好,其它的设置和常规绘图参数一致。除此以外,“plotrix”包里的violin_plot()函数也可以用来绘制小提琴图,有兴趣的朋友可以自行学习。