数据准备
df <- read.table(file = "D:/Documents/R wd/df.csv", header = T, sep = ",", colClasses = c(year = "character", nitrogen = "character", variety = "character", block = "character")) # 数据导入。
df # 查看数据。
## year nitrogen variety block v1 v2 v3 v4
## 1 2020 N1 a 1 1.26 2.14 3.4 4.66
## 2 2020 N1 a 2 1.20 2.90 4.1 5.30
## 3 2020 N1 a 3 1.30 3.00 4.3 5.60
## 4 2020 N1 b 1 1.08 1.72 2.8 3.88
## 5 2020 N1 b 2 1.05 1.65 2.7 3.75
## 6 2020 N1 b 3 1.15 1.35 2.5 3.65
## 7 2020 N2 a 1 1.32 3.78 5.1 6.42
## 8 2020 N2 a 2 1.28 4.32 5.6 6.88
## 9 2020 N2 a 3 1.35 3.95 5.3 6.65
## 10 2020 N2 b 1 1.33 3.47 4.8 6.13
## 11 2020 N2 b 2 1.28 2.72 4.0 5.28
## 12 2020 N2 b 3 1.30 3.90 5.2 6.50
## 13 2021 N1 a 1 1.19 3.61 4.8 5.99
## 14 2021 N1 a 2 1.21 3.29 4.5 5.71
## 15 2021 N1 a 3 1.24 3.26 4.5 5.74
## 16 2021 N1 b 1 1.09 2.71 3.8 4.89
## 17 2021 N1 b 2 1.28 2.32 3.6 4.88
## 18 2021 N1 b 3 1.35 1.95 3.3 4.65
## 19 2021 N2 a 1 1.45 4.35 5.8 7.25
## 20 2021 N2 a 2 1.40 3.80 5.2 6.60
## 21 2021 N2 a 3 1.37 4.23 5.6 6.97
## 22 2021 N2 b 1 1.28 2.72 4.0 5.28
## 23 2021 N2 b 2 1.15 3.35 4.5 5.65
## 24 2021 N2 b 3 1.24 3.46 4.7 5.94
6.5 箱线图
箱线图(又称盒须图)通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数) 、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。
箱线图能够显示出可能为离群点(范围±1.5*IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。
boxplot(x, ...)
x:用于绘制箱线图的向量。....:用于调整箱线图的各参数。
6.5.1 使用并列箱线图进行跨组比较
箱线图可以展示单个变量或分组变量。
boxplot(formula, data=dataframe)
formula:一个公式,dataframe:提供数据的数据框(或列表)。
varwidth=TRUE,将使箱线图的宽度与其样本大小的平方根成正比。
horizontal=TRUE,可以反转坐标轴的方向。
notch=TRUE,可以得到含凹槽的箱线图。
y ~ A,这将为类别型变量A的每个值并列地生成数值型变量y的箱线图。公式y ~ A*B则将为类别型变量A和B所有水平的两两组合生成数值型变量y的箱线图。
str(df) # 查看数据结构。
## 'data.frame': 24 obs. of 8 variables:
## $ year : chr "2020" "2020" "2020" "2020" ...
## $ nitrogen: chr "N1" "N1" "N1" "N1" ...
## $ variety : chr "a" "a" "a" "b" ...
## $ block : chr "1" "2" "3" "1" ...
## $ v1 : num 1.26 1.2 1.3 1.08 1.05 1.15 1.32 1.28 1.35 1.33 ...
## $ v2 : num 2.14 2.9 3 1.72 1.65 1.35 3.78 4.32 3.95 3.47 ...
## $ v3 : num 3.4 4.1 4.3 2.8 2.7 2.5 5.1 5.6 5.3 4.8 ...
## $ v4 : num 4.66 5.3 5.6 3.88 3.75 3.65 6.42 6.88 6.65 6.13 ...
df$nitrogen <- as.factor(df$nitrogen) # 将nitrogen转换为因子。
df$year <- as.factor(df$year) # 将year转换为因子。
str(df) # 查看数据结构。
## 'data.frame': 24 obs. of 8 variables:
## $ year : Factor w/ 2 levels "2020","2021": 1 1 1 1 1 1 1 1 1 1 ...
## $ nitrogen: Factor w/ 2 levels "N1","N2": 1 1 1 1 1 1 2 2 2 2 ...
## $ variety : chr "a" "a" "a" "b" ...
## $ block : chr "1" "2" "3" "1" ...
## $ v1 : num 1.26 1.2 1.3 1.08 1.05 1.15 1.32 1.28 1.35 1.33 ...
## $ v2 : num 2.14 2.9 3 1.72 1.65 1.35 3.78 4.32 3.95 3.47 ...
## $ v3 : num 3.4 4.1 4.3 2.8 2.7 2.5 5.1 5.6 5.3 4.8 ...
## $ v4 : num 4.66 5.3 5.6 3.88 3.75 3.65 6.42 6.88 6.65 6.13 ...
boxplot(df$v1, main = "单变量箱线图") # 单个变量箱线图。
boxplot(df$v1, col = "green", varwidth = TRUE, notch = TRUE, main = "单变量箱线图") # 参数调整,col指定填充颜色,varwidth指定宽度与样本大小的平方根成正比,指定是否显示凹槽。
boxplot(df$v1 ~ df$year, data = df, col = c("blue", "red"), main = "分组箱线图", xlab = "year", ylab = "v1") # 分组变量箱线图,分组依据为df数据集year。
boxplot(df$v1 ~ df$year*df$nitrogen, data = df, col = c("green", "grey"), main = "分组箱线图", xlab = "year and nitrogen", ylab = "v1") # 绘制以year和nitrogen为分组变量的箱线图。
boxplot(df$v1 ~ df$year*df$nitrogen*df$variety, data = df,col = c("blue", "red", "green"), main = "分组箱线图", xlab = "year, nitrogen and variety", ylab = "v1", cex.axis = 0.5) # 绘制以year和nitrogen及variety为分组变量的箱线图。
6.5.2 小提琴图
小提琴图是箱线图与核密度图的结合。你可以使用vioplot包中的vioplot()函数绘制它。
Vioplot(x1,x2,...,names=,col=)
x1, x2, ...:表示要绘制的一个或多个数值向量(将为每个向量绘制一幅小提琴图)。
names:小提琴图中标签的字符向量;
col:一个为每幅小提琴图指定颜色的向量。
library(vioplot) # 调用vioplot包。
vioplot(df$v1) # 单变量小提琴图。
vioplot(df$v1, df$v2, names=c("v1", "v2"), col = c("red", "gold")) # 多变量小提琴图。
参考资料:
- 《R语言实战》(中文版),人民邮电出版社,2013.