相信帶字母的顯著性標(biāo)記圖大家都不會陌生撤摸,在許多文獻(xiàn)中多可以看到類似的圖徽千。首先來看看它長啥樣
不管是在月末組會匯報(bào)珍手,還是自己寫文章過程中都會用到。今天就一起來學(xué)一下怎么做辞做。
首先學(xué)一個概念數(shù)據(jù)可視化琳要,
可視化:可視化(Visualization)是利用計(jì)算機(jī)圖形學(xué)和技術(shù),將數(shù)據(jù)轉(zhuǎn)換成圖形或圖像在屏幕上顯示出來凭豪,再進(jìn)行交互處理的理論焙蹭、方法和技術(shù)。
大概意思就是說一圖勝千言嫂伞】桌鳎看看那些好雜志的文章,不得不承認(rèn)人家的圖確實(shí)簡潔好看帖努,言簡意賅撰豺。哎!作圖也是有功力的拼余。多向大佬膜拜膜拜污桦,哈哈哈
回到正題,這類圖該如何做呢匙监!大概有兩種做法:一種是利用統(tǒng)計(jì)軟件(eg:SPSS凡橱、DPS等)先分析得到結(jié)果,再利用其他生物繪圖工具(eg:EXCEL工具)做出柱狀圖,再把字母和誤差線加上添加亭姥;第二種就是利用R語言這類專業(yè)用代碼一鍵出圖稼钩。首先我會先用R語言進(jìn)行單因素方差分析。然后再介紹一款超級簡單的統(tǒng)計(jì)軟件DPS做一遍。
R語言
準(zhǔn)備工作
- 預(yù)裝R軟件
- 預(yù)裝R-studio
-
整理好的數(shù)據(jù)表
可以用EXCEL表格工具整理好,保存為.txt文件
數(shù)據(jù)格式:第一列為分組信息打掘,第二列為不同觀測的值盯蝴,若有多列向后加即可。eg:假如還有株高箍鼓、鮮重等指標(biāo)病游。依次加到后面即可
代碼部分
#加載我的工作目錄
setwd("G:/我的堅(jiān)果云/研究生/實(shí)驗(yàn)數(shù)據(jù)")
#讀取數(shù)據(jù)请琳,換成自己的文件名即可
data <- read.table("123.txt",sep="\t",header=TRUE)
#這一句的意思是:將你的分組信息轉(zhuǎn)化為factor侨拦,不然軟件在運(yùn)算過程種識別不了
data$處理 <- as.factor(data$處理)
#查看導(dǎo)入表格中發(fā)病率這一列的數(shù)據(jù)類型
class(data$處理)
#這里出現(xiàn) factor 就可以下一步了
#方差齊性檢驗(yàn)
#法1bartlett.test
nom <- bartlett.test(data$發(fā)病率~data$處理,data = data)
nom
#法2
install.packages("car")
library(car)
nom1<-leveneTest(data1$發(fā)病率~data1$gruop,data = data1)
nom$p.value
#最后兩個的p.value大于0.05 說明方差是齊性殊橙,可以進(jìn)行下一步分析
# 單因素方差分析,整體來看差異顯著
oneway<-aov(data$發(fā)病率~data$處理,data = data)
anova(oneway)
#多重比較
# LSD法(Fisher’s Least Significant Difference)
# LSD法檢驗(yàn)處微小的差異狱从,比較方便的是直接得出顯著行標(biāo)記蛀柴,不需人工標(biāo)記
install.packages("agricolae")
library("agricolae")
out <- LSD.test(oneway,"data$處理",p.adj="none")
out
嗯,到這分析已經(jīng)結(jié)束了矫夯。下面開始繪制圖形
#整理繪圖需要的表格
mar<-out$groups
rownamemar<-row.names(mar)
newmar<-data.frame(rownamemar,mar$`data$發(fā)病率`,mar$groups)
sort<-newmar[order(newmar$rownamemar),]
# 將groups的數(shù)據(jù)框按列名排序,目的是保持與均值標(biāo)準(zhǔn)差的數(shù)據(jù)一一對應(yīng)
rowname<-row.names(out$means)
mean<-out$means[,1]
sd<-out$means[,2]
marker<-sort$mar.groups
plotdata<-data.frame(rowname,mean,sd,marker)
plotdata
install.packages("ggplot2")
library("ggplot2")
p1<-ggplot(plotdata,aes(x=factor(rowname),y=mean))+geom_bar(position=position_dodge(0.6),width = 0.5,stat = "identity")
p1
p2<-p1+geom_errorbar(aes(ymin=mean-sd,ymax=mean+sd),position=position_dodge(0.6),width=0.2)
p3<-p2+geom_text(aes(x=factor(rowname),y=mean+sd+2.0,label=marker),size=3,position= position_dodge(0.6))
p3
p4<-p3+xlab("")+ylab("發(fā)病率(%)")
p4
p5<-p4+coord_cartesian(ylim= c(0,100),expand = FALSE)
p5
#發(fā)現(xiàn)沒有g(shù)gplot2的作圖方式挺好玩的吊洼,就像玩俄羅斯方塊一樣训貌,一層一層往上加,
#更改y軸顯示范圍冒窍,這里的expand默認(rèn)為TRUE
mytheme<-theme_bw()+theme(axis.title =element_text(size = 12),
axis.text =element_text(size=12),
panel.grid.major =element_line(color ="white"),
panel.grid.minor =element_line(colour = "white"),
axis.text.x =element_text(size = 12,angle=0,vjust=0,hjust=0,color = "black"),
axis.text.y =element_text(size = 12,color ="black"),)
p5+mytheme
coord_cartesian(ylim = c(0,60),expand =FALSE)的expand改為TRUE递沪。
ggsave("發(fā)病率.pdf", width = 10, height= 10, units = "cm")
end
有了這套代碼,小伙伴就可以根據(jù)自己的需要僅更改幾個地方就可以完成分析了综液。
如何根據(jù)自己的需要改呢
還是用上面的數(shù)據(jù)款慨。比如我現(xiàn)先還要做病情指數(shù)的分析
setwd("G:/我的堅(jiān)果云/研究生/實(shí)驗(yàn)數(shù)據(jù)")
data <- read.table("123.txt",sep="\t",header=TRUE)
data$處理 <- as.factor(data$處理)
class(data$處理)
#方差齊性檢驗(yàn)
#法1bartlett.test
nom <- bartlett.test(data$病情指數(shù)~data$處理,data = data)
nom
#法2
install.packages("car")
library(car)
nom1<-leveneTest(data$病情指數(shù)~data1$gruop,data = data1)
nom$p.value
#nom$p.value大于0.05 說明方差是齊性
# 單因素方差分析,整體來看差異顯著
oneway<-aov(data$病情指數(shù)~data$處理,data = data)
anova(oneway)
#多重比較
# LSD法(Fisher’s Least Significant Difference)
# LSD法檢驗(yàn)處微小的差異谬莹,比較方便的是直接得出顯著行標(biāo)記檩奠,不需人工標(biāo)記
install.packages("agricolae")
library("agricolae")
out <- LSD.test(oneway,"data$處理",p.adj="none")
out
mar<-out$groups
rownamemar<-row.names(mar)
newmar<-data.frame(rownamemar,mar$`data$病情指數(shù)`,mar$groups)
sort<-newmar[order(newmar$rownamemar),]
# 將groups的數(shù)據(jù)框按列名排序,目的是保持與均值標(biāo)準(zhǔn)差的數(shù)據(jù)一一對應(yīng)
rowname<-row.names(out$means)
mean<-out$means[,1]
sd<-out$means[,2]
marker<-sort$mar.groups
plotdata<-data.frame(rowname,mean,sd,marker)
plotdata
#可視化作圖
install.packages("ggplot2")
library("ggplot2")
p1<-ggplot(plotdata,aes(x=factor(rowname),y=mean))+geom_bar(position=position_dodge(0.6),width = 0.5,stat = "identity")
p1
p2<-p1+geom_errorbar(aes(ymin=mean-sd,ymax=mean+sd),position=position_dodge(0.6),width=0.2)
p3<-p2+geom_text(aes(x=factor(rowname),y=mean+sd+2.0,label=marker),size=3,position= position_dodge(0.6))
p3
p4<-p3+xlab("")+ylab("病情指數(shù)")
p4
p5<-p4+coord_cartesian(ylim= c(0,100),expand = FALSE)
p5
#更改y軸顯示范圍附帽,這里的expand默認(rèn)為TRUE
mytheme<-theme_bw()+theme(axis.title =element_text(size = 12),
axis.text =element_text(size=12),
panel.grid.major =element_line(color ="white"),
panel.grid.minor =element_line(colour = "white"),
axis.text.x =element_text(size = 12,angle=0,vjust=0,hjust=0,color = "black"),
axis.text.y =element_text(size = 12,color ="black"),)
p5+mytheme
這里發(fā)現(xiàn)Y范圍范圍太大埠戳,可以將p5<-p4+coord_cartesian(ylim= c(0,100),expand = FALSE)括號里的參數(shù)改為50
可以看我主要改了哪里,然后對應(yīng)的改為自己的數(shù)據(jù)即可蕉扮。
其實(shí)R語言沒有想象中那么難整胃。這話從一個學(xué)了兩個月新手嘴里說出,是有點(diǎn)“飄”了喳钟,用老家的方言說就是“你太刨了”屁使。我知道可能會被打,新手上路奔则,多多包涵蛮寂。
有時(shí)候知道這行代碼什么意思就可以了,用的時(shí)候搜別人寫過的代碼套自己的就可以了应狱。這套代碼我也是網(wǎng)上搬過來的共郭,然后花了一個下午把它搞明白。搞明白之后最大的好處就是,一分鐘內(nèi)我就可以做出一張漂亮的單因素方差分析圖除嘹。也算值了
用DPS做方差分析
將excel表格中數(shù)據(jù)復(fù)制粘貼過來就可以了
比較麻煩的是叠蝇,在excel中習(xí)慣一般都是用列來表示重復(fù),DPS不一樣恰好相反年缎,可以在excel先復(fù)制悔捶,粘貼時(shí)選擇轉(zhuǎn)置,在粘貼到DPS中单芜。
粘貼好數(shù)據(jù)后蜕该,選擇試驗(yàn)統(tǒng)計(jì)——完全隨機(jī)設(shè)計(jì)——單因素實(shí)驗(yàn)統(tǒng)計(jì)分析——選擇兩兩比較的方法,可以指第一列的名稱洲鸠,也可以不指定堂淡。
根據(jù)上述結(jié)果,用excel繪制柱型圖扒腕,添加誤差線绢淀,顯著性字母。
具體方法自行百度瘾腰,
之所以選擇學(xué)R語言皆的,就是因?yàn)槲覒校湫头收E瑁髅骺梢杂密浖鉀Q的事费薄,為啥在那里死磕呢?