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()函数也可以用来绘制小提琴图,有兴趣的朋友可以自行学习。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- .Net Core微服务入门全纪录(一)——项目搭建
- JS中的call()方法和apply()方法和slice()用法总结
- 完整的url以及同源跨域处理
- .Net Core微服务入门全纪录(二)——Consul-服务注册与发现(上)
- .Net Core微服务入门全纪录(三)——Consul-服务注册与发现(下)
- MTO变量缩放与统一决策空间
- css相关的几个点
- .Net Core微服务入门全纪录(四)——Ocelot-API网关(上)
- Apache下如何禁止指定目录运行PHP脚本
- .Net Core微服务入门全纪录(五)——Ocelot-API网关(下)
- 在Docker中运行PostgreSQL + pgAdmin 4
- .Net Core微服务入门全纪录(六)——EventBus-事件总线
- SVN提交时强制用户写日志
- Apache vhost配置
- win10使用WSL 2运行Docker Desktop,运行文件从C盘迁移到其他目录