问题:按照正态分布随机生成A(平均值= 50,sd = 3),B(平均值= 45,sd = 2),C(平均值= 40,sd = 5)和D(平均值= 52)作为4种甜瓜的产量数据 ,sd = 2),并绘制一个图以尽可能直观地显示4个品种之间的产量是否有显着差异结果。
-
###工作路径设置
-
getwd()
-
## [1] "/Users/Zhanghp/Desktop/myProjects/finalexam"
-
setwd("/Users/Zhanghp/Desktop/myProjects/finalexam")
-
###随机生成40个甜瓜产量数据
-
dataA <- rnorm(n=40,mean=50,sd=3)
-
dataB <- rnorm(n=40,mean=45,sd=2)
-
dataC <- rnorm(n=40,mean=40,sd=2)
-
dataD <- rnorm(n=40,mean=52,sd=2)
-
mydata <- data.frame(A=dataA,B=dataB,C=dataC,D=dataD)##以四组数据创建数据框
-
mydata
-
## A B C D
-
## 1 51.38140 43.62086 38.34938 49.31558
-
## 2 48.17464 43.95625 41.53496 49.74972
-
## 3 47.49706 42.28571 40.86612 51.50041
-
## 4 48.97543 43.96911 42.22170 54.82949
-
## 5 49.07308 47.71466 38.57461 51.70845
-
## 6 52.68781 44.75586 41.55359 51.47254
-
## 7 51.40030 45.45422 43.13246 52.39675
-
## 8 49.84378 44.40448 39.08546 49.73431
-
## 9 49.81800 42.41965 41.33657 52.03518
-
## 10 49.37837 45.21844 37.87255 51.20733
-
## 11 47.25974 42.24899 40.07773 52.53069
-
## 12 54.62392 43.54648 40.30749 51.40711
-
## 13 46.80442 41.88457 37.07953 51.10087
数据框格式如上,该数据框为宽数据类型,若要用其来绘制箱线图需将数据转换为长数据类型,这里我们可以调用 gather(tidyr)函数来实现这一转换,代码如下:
-
###加载所需R packages
-
library(tidyr) ##gather函数
-
library(ggplot2) ##ggplot函数
-
library(ggpubr) ##stat_compare_means函数
-
##数据归整处理(宽数据转换为长数据)
-
mydata <- gather(mydata,key = 'Varieties',value = "Yield",A,B,C,D)
-
mydata
-
mydata
-
## Varieties Yield
-
## 1 A 51.38140
-
## 2 A 48.17464
-
## 3 A 47.49706
-
## 4 A 48.97543
-
## 5 A 49.07308
-
## 6 A 52.68781
-
## 7 A 51.40030
-
## 8 A 49.84378
-
## 9 A 49.81800
-
## 10 A 49.37837
-
## 11 A 47.25974
-
## 12 A 54.62392
-
## 13 A 46.80442
-
## 14 A 45.55051
-
## 15 A 45.49200
处理后的数据如上,为长数据类型,下一步即可利用ggplot函数进行箱线图的初步绘制
-
###基础箱线图绘制
-
p1 <- ggplot(mydata,aes(x=Varieties,y=Yield,fill=Varieties))+geom_boxplot()
-
p1+scale_fill_manual(values=c("red","green","blue","purple"))##以Varieties为类别进行颜色填充
由于ggplot绘制的箱线图默认将误差线上下端的横线去除,若要添加横线则需对以上基础箱线图进行进一步的美化,包括原始数据的散点分布、默认背景颜色的替换、组间的显著性检验、p值添加、图例及标题设置。 最终代码、注释及效果图如下:
-
# 设定比较对象用于显著性分析
-
my_lists <- list(c("A", "B"), c("B", "C"), c("C", "D"),c("C", "A"),c("A", "D"),c("B", "D"))
-
-
##添加散点和显著性检验结果于箱线图中
-
p1 + geom_jitter(aes(fill=Varieties),width =0.2,shape = 21,size=1)+ ##添加散点分布
-
theme( = element_blank(),axis.line = element_line())+ ##去默认灰色背景颜色
-
stat_compare_means(comparisons=my_lists,label="")+ ##显著性分析
-
stat_boxplot(geom = "errorbar",width=0.5)+ ##添加误差线
-
labs(title = "Plot of Melon'yield by Varieties")+ ##更改图例位置
-
theme( = "bottom") ##添加标题
-
###图片文件保存
-
ggsave("")