折线图
dlm.plot <- function(filename) {
df.test<-read.csv(filename)
df.test.2<-melt(df.test,ID=c("Type","Species"))
# str(df.test.2)
names(df.test.2)[3:4]<-c("Protein","Number")
# change names of species
df.test.2$Species<-mapvalues(df.test.2$Species,from=c("07_Ophiostoma_piceae","08_Sporothrix_schenckii", "17_Sporothrix_brasiliensis","11_Cordyceps_militaris","12_Beauveria_bassiana", "13_Metarhizium_anisopliae","14_Sporothrix_insectorum", "15_Metarhizium_robertsii", "16_Moelleriella_libera", "05_Grosmannia_clavigera", "09_Fusarium_graminearum","10_Magnaporthe_oryzae", "18_Verticillium_alfalfae", "19_Sclerotinia_sclerotiorum" ,"20_Botrytis_cinerea", "21_Zymoseptoria_tritici", "01_Esteya_vermicola", "02_Drechslerella_stenobrocha", "03_Arthrobotrys_oligospora","04_Dactylellina_haptotyla","06_Hirsutella_minnesotensis" ),
to=c("Op","Ssch","Sb","Cm","Bb","Ma","Si","Mr","Ml","Gc","Fg","Mo","Va","Sscl","Bc","Zt","Ev","Ds","Ao","Dh","Hm")
)
# df.test.2$Type<-mapvalues(df.test.2$Type, from = c("Closed"), to=c("CP"))
# 改变列的顺序
df.level<-levels(df.test.2$Species)
df.test.2$Species<-factor(df.test.2$Species,levels = c(df.level[7], df.level[8], df.level[17], df.level[11:16], df.level[5], df.level[9:10], df.level[18:21], df.level[1:4], df.level[6]))
# plot
p<-ggplot(df.test.2,aes(Species,Number,linetype=Protein,shape=Type,colour=Protein,group=Protein))+geom_point()+geom_line()
# white
p+theme_bw()+theme(axis.text.x = element_text(face = "italic", angle = 60,hjust = 1.1,vjust = 1.1), plot.margin=unit(x=c(2,1,2,.5),units = "cm"))
# grey
p+theme(axis.text.x = element_text(face = "italic", angle = 60,hjust = 1.1,vjust = 1.1), plot.margin=unit(x=c(1,1,1,.5),units = "cm"))
# save as wmf
# savename.wmf<-paste0(filename,"line.wmf")
# ggsave(savename,height = 6)
# save as pdf
savename.pdf<-paste0(filename,"line.pdf")
ggsave(savename.pdf,width=8,height = 5)
}
dlm.plot("SP_SSP_lineplot.csv")
## Using Type, Species as id variables
箱线图
library(multcompView)
# I need to group the treatments that are not different each other together.
generate_label_df <- function(TUKEY, variable) {
# Extract labels and factor levels from Tukey post-hoc
Tukey.levels <- TUKEY[[variable]][, 4]
# multcompLetters这个函数确定了字母
Tukey.labels <- data.frame(multcompLetters(Tukey.levels, threshold = 0.1)["Letters"])
# I need to put the labels in the same order as in the boxplot :
Tukey.labels$treatment = rownames(Tukey.labels)
Tukey.labels = Tukey.labels[order(Tukey.labels$treatment), ]
return(Tukey.labels)
}
# filename<-("Ankkyrin_Leucine_Tyr_Xyl_2.csv")
dlm.box <- function(filename) {
df.test<-read.csv(filename)
# df.test$Type<-mapvalues(df.test$Type, from = c("Closed"), to=c("CP"))
# str(df.test.2)
names(df.test)[3:4]<-c("Protein","Number")
X<-names(df.test)
savename.pdf<-paste0(filename,"box.pdf")
# 如果基因数小于5个
if (length(X)-2<5) {
pdf(savename.pdf,width = (length(X)-2)*2,height = 3, family="Times", pointsize = 9)
par(mfrow=c(1,(length(X)-2)),mar = c(3, 4, .5, .5))
X<-names(df.test)
for (j in 3:length(X)){
data.i<-df.test[, X[j]]
model=lm(data.i ~ df.test$Type )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'df.test$Type', conf.level=0.95)
a<-TUKEY$`df.test$Type`[,c(1,4)]
colnames(a)<-c(paste(X[j],"diff",sep = "_"),"p adj")
p.file<-paste0(filename,"_pvalue.csv")
write.table(a,file=p.file,sep=",",quote=F,append=T)
LABELS=generate_label_df(TUKEY , "df.test$Type")
a=boxplot(data.i~df.test$Type,
ylim=c(min(data.i,na.rm=T) ,
1.01*max(data.i,na.rm=T)) ,
#xlab="Crosses",
ylab=X[j] , main="",
border=c("orange","darkgrey","lightgreen","blue"))
abline(h=mean(data.i,na.rm=T),lty=2)
means <- aggregate(data.i, list(df.test$Type), mean, na.rm=T)
points(means$x, col = "black", pch = 18)
# I want to write the letter over each box. Over is how high I want to write it.
over=0.02*max( a$stats[nrow(a$stats),] )
#Add the labels
text( c(1:nlevels(df.test$Type)) ,
a$stats[nrow(a$stats),]+over , LABELS[,1])
}
dev.off()
} else {
pdf(savename.pdf,width = ceiling((length(X)-2)/3)*2,height = ceiling((length(X)-2)/3)*3,family="Times",pointsize = 9)
par(mfrow=c(ceiling((length(X)-2)/3),ceiling((length(X)-2)/3)),mar = c(3, 4, .5, .5))
X<-names(df.test)
for (j in 3:length(X)){
data.i<-df.test[, X[j]]
model=lm(data.i ~ df.test$Type )
ANOVA=aov(model)
TUKEY <- TukeyHSD(x=ANOVA, 'df.test$Type', conf.level=0.95)
a<-TUKEY$`df.test$Type`[,c(1,4)]
colnames(a)<-c(paste(X[j],"diff",sep = "_"),"p adj")
p.file<-paste0(filename,"_pvalue.csv")
write.table(a,file=p.file,sep=",",quote=F,append=T)
LABELS=generate_label_df(TUKEY , "df.test$Type")
a=boxplot(data.i~df.test$Type,
ylim=c(min(data.i,na.rm=T) ,
1.01*max(data.i,na.rm=T)) ,
#xlab="Crosses",
ylab=X[j] , main="",
border=c("orange","darkgrey","lightgreen","blue"))
abline(h=mean(data.i,na.rm=T),lty=2)
means <- aggregate(data.i, list(df.test$Type), mean, na.rm=T)
points(means$x, col = "black", pch = 18)
# I want to write the letter over each box. Over is how high I want to write it.
over=0.02*max( a$stats[nrow(a$stats),] )
#Add the labels
text( c(1:nlevels(df.test$Type)) ,
a$stats[nrow(a$stats),]+over , LABELS[,1])
}
dev.off()
}
}
dlm.box("SP_SSP_box.csv")
## Warning in write.table(a, file = p.file, sep = ",", quote = F, append = T):
## appending column names to file
## Warning in write.table(a, file = p.file, sep = ",", quote = F, append = T):
## appending column names to file
## png
## 2