library(reshape2)
library(ggplot2)
library(plyr)

折线图

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