# HG changeset patch # User mnhn65mo # Date 1534150507 14400 # Node ID c29354d16967c008dea3cbf1ad36672e0b2c7b95 # Parent c5a10acd34e3b7cbc87c2df226cf808f4e4c96b0 Uploaded diff -r c5a10acd34e3 -r c29354d16967 butterfly_crossplot.R --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/butterfly_crossplot.R Mon Aug 13 04:55:07 2018 -0400 @@ -0,0 +1,556 @@ +################################################################## +#### Script generique pour realiser les figures en croix ###### +#### a partir des donnees brut ###### +################################################################## + +### Version V1.2 _ 2018-07-31 + +library(ggplot2) +library(RColorBrewer) + +args <- commandArgs(trailingOnly = TRUE) + +### importation code +sourcefunctions<-args[1] +source(sourcefunctions) + +## fonction d'importation des fichier des donnes +### fonction d'importation, de concatenation des fichiers +### verification des nom de colonnes +### verification des doublon de ligne +read.data <- function(file=NULL,decimalSigne=".") { +# cat("1) IMPORTATION \n--------------\n") +# cat("<--",file,"\n") + data <- read.table(file,sep="\t",stringsAsFactors=FALSE,header=TRUE,dec=decimalSigne) + ## verification qu'il y a plusieur colonnes et essaye different separateur + if(ncol(data)==1) { + data <- read.table(file,sep=";",stringsAsFactors=FALSE,header=TRUE,dec=decimalSigne) + if(ncol(data)==1) { + data <- read.table(file,sep=",",stringsAsFactors=FALSE,header=TRUE,dec=decimalSigne) + if(ncol(data)==1) { + data <- read.table(file,sep=" ",stringsAsFactors=FALSE,header=TRUE,dec=decimalSigne) + if(ncol(data)==1) { + stop("!!!! L'importation a echoue\n les seperatateurs de colonne utilise ne sont pas parmi ([tabulation], ';' ',' [espace])\n -> veuillez verifier votre fichier de donnees\n") + } + } + } + } + return(data) +} + + + + + +filtre1niveau <- function(func, + nom_fichier = filename, + dec=".", + nom_fichierCouleur= color_filename, + col_abscisse = "AB_MOYENNE", + figure_abscisse = "Abondance", + col_ordonnee = "DIVERSITE_MOYENNE", + figure_ordonnee = "Diversite", + nomGenerique="GLOBAL", + vec_figure_titre = c("Les Papillons"), + colourProtocole = TRUE, + nomProtocole = "Papillons", + vec_col_filtre = vec_col_filtre_usr, + col_sousGroup = NULL,# + val_filtre = NULL,# + figure_nom_filtre = NULL,# + bagplot = TRUE, + bagProp=c(.05,.5,.95), + seuilSegment=30, + segmentSousSeuil=TRUE, + forcageMajusculeFiltre=TRUE, + forcageMajusculeSousGroupe=TRUE){ + + dCouleur <- read.data(file=nom_fichierCouleur) + d <- read.data(file=nom_fichier,decimalSigne=dec) + if(colourProtocole & !is.null(nomProtocole)) colourProtocole_p <- as.character(dCouleur[dCouleur[,2]==nomProtocole,3]) else colourProtocole_p <- NULL + + for(f in 1:length(vec_col_filtre)) { + if(length(vec_figure_titre)==1){ + figure_titre_f <- vec_figure_titre + }else{ + figure_titre_f <- vec_figure_titre[f] + } + col_filtre_f <- vec_col_filtre[f] + cat(col_sousGroup) #Just to check + if(func=="ggfiltre1niveau"){ + cat("ggfiltre1niveau") + ggfiltre1niveau(d, + col_abscisse, + figure_abscisse, + col_ordonnee, + figure_ordonnee, + figure_titre = figure_titre_f, + col_filtre = col_filtre_f, + nomGenerique, + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= subset(dCouleur,Filtre==col_filtre_f), + colourProtocole = colourProtocole_p, + nomProtocole, + bagplot, + bagProp=c(.05,.5,.95), + seuilSegment, + segmentSousSeuil, + forcageMajusculeFiltre) + }else if(func=="gglocal"){ + cat("gglocal") + gglocal(d, + col_abscisse, + figure_abscisse, + col_ordonnee, + figure_ordonnee, + figure_titre = figure_titre_f, + col_filtre = col_filtre_f, + nomGenerique = nomGenerique, + col_sousGroup = col_sousGroup, + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= subset(dCouleur,Filtre==col_filtre_f), + colourProtocole = colourProtocole_p, + nomProtocole, + couleurLocal="#f609c1", + bagplot, + bagProp, + seuilSegment, + segmentSousSeuil, + forcageMajusculeFiltre, + forcageMajusculeSousGroupe) + }else{ + cat("ggCompareLevel") + ggCompareLevel(d, + col_abscisse, + figure_abscisse, + col_ordonnee, + figure_ordonnee, + figure_titre = figure_titre_f, + col_filtre = col_filtre_f, + nomGenerique = nomGenerique, + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= subset(dCouleur,Filtre==col_filtre_f), + colourProtocole = colourProtocole_p, + nomProtocole, + bagplot, + bagProp, + seuilSegment, + segmentSousSeuil, + forcageMajusculeFiltre) + } + } +} + +ggfiltre1niveau <- function(d, + col_abscisse = "AB_MOYENNE", + figure_abscisse = "Abondance", + col_ordonnee = "DIVERSITE_MOYENNE", + figure_ordonnee = "Diversite", + figure_titre = "Referentiel papillon", + col_filtre = "nom_reseau", + nomGenerique = "Global", + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= NULL, + colourProtocole = NULL, + nomProtocole = NULL, + bagplot = TRUE, + bagProp=c(.05,.5,.95), + seuilSegment=30, + segmentSousSeuil=TRUE, + forcageMajusculeFiltre=TRUE, + result_dir="resultats/") { + + d$groupe <- as.character(d[,col_filtre]) + d$abscisse <- d[,col_abscisse] + d$ordonnee <- d[,col_ordonnee] + d$groupe <-gsub("/","_",d$groupe) + d$groupe <-gsub("!","",d$groupe) + + if(forcageMajusculeFiltre){ + d$groupe <- toupper(d$groupe)} + + d <- subset(d,!(is.na(groupe)) & !(is.na(abscisse)) & !(is.na(ordonnee)) & groupe != "") + + if(is.null(val_filtre)){ + lesModalites <- unique(d$groupe) + }else{ + lesModalites <- val_filtre + } + +# repResult <- dir(result_dir) +# current_dir<-getwd() +# dir.create(file.path(current_dir,result_dir)) +# +# if(!(col_filtre %in% repResult)){ +# dir.create(file.path(".",paste(result_dir,col_filtre,sep="")))} +# +# nomRep1 <- paste(result_dir,col_filtre,"/",sep="") + + d.autre <- d + d.autre$groupe <- nomGenerique + + for(m in lesModalites) { + d.reseau <- subset(d,groupe==m) + d.reseau$groupe <- m + ggTable <- rbind(d.autre,d.reseau) + + seuilResum <- nrow(d.reseau) >= seuilSegment + + ggTableResum <- aggregate(cbind(ordonnee, abscisse) ~ groupe, data = ggTable,quantile, c(.25,.5,.75)) + ggTableResum <- data.frame(ggTableResum[,1],ggTableResum[,2][,1:3],ggTableResum[,3][,1:3]) + colnames(ggTableResum) <- c("groupe","ordonnee.inf","ordonnee.med","ordonnee.sup","abscisse.inf","abscisse.med","abscisse.sup") + + if(ggTableResum$groupe[2]==nomGenerique){ + ggTableResum <- ggTableResum[c(2,1),]} + + if(!(is.null(tab_figure_couleur))) { + if(m %in% tab_figure_couleur$Modalite) { + figure_couleur <- setNames(c(as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == nomGenerique]), + as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == m])), + c(nomGenerique,m)) + }else{ + figure_couleur <- setNames(c(as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == nomGenerique]), + as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == ""])), + c(nomGenerique,m)) + } + } + +# repResult <- dir(nomRep1) +# if(!(m %in% repResult)){ +# dir.create(paste(nomRep1,m,sep=""))} +# nomRep <- paste(nomRep1,m,"/",sep="") +# +# +# if(!is.null(nomProtocole)){ +# repResult <- dir(nomRep) +# if(!(nomProtocole %in% repResult)){ +# dir.create(paste(nomRep,nomProtocole,sep=""))} +# nomRep <- paste(nomRep,nomProtocole,"/",sep="") +# } + + + gg <- ggplot(ggTable,aes(x=abscisse,y=ordonnee,colour=groupe,fill=groupe)) + if(bagplot){ + gg <- gg + stat_bag(data=d.autre,prop=bagProp[1],colour=NA,alpha=.7) + stat_bag(data=d.autre,prop=bagProp[2],colour=NA,alpha=.4) + stat_bag(data=d.autre,prop=bagProp[3],colour=NA,alpha=.2) } + else { + gg <- gg + geom_point(alpha=.2) + } + gg <- gg + geom_hline(data=subset(ggTableResum,groupe== nomGenerique),aes(yintercept = ordonnee.med,colour=groupe),size=.5,linetype="dashed") + geom_vline(data=subset(ggTableResum,groupe==nomGenerique),aes(xintercept = abscisse.med,colour=groupe),size=.5,linetype="dashed") + if(segmentSousSeuil) { + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.8,size=2.5) + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.8,size=2.5) + if(!(seuilResum)) { + gg <- gg + geom_segment(data=subset(ggTableResum,groupe!=nomGenerique),aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.5,size = 1.5,colour="white") + gg <- gg + geom_segment(data=subset(ggTableResum,groupe!=nomGenerique),aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.5,size = 1.5,colour="white") + } + } else { + gg <- gg + geom_segment(data=subset(ggTableResum,groupe==nomGenerique),aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.8,size = 2.5) + gg <- gg + geom_segment(data=subset(ggTableResum,groupe==nomGenerique),aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.8,size = 2.5) + } + + gg <- gg + geom_point(data=d.reseau,size=2) + gg <- gg + labs(list(title=figure_titre,x=figure_abscisse,y=figure_ordonnee)) + + if(!is.null(colourProtocole)){ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA), axis.ticks = element_line(colour = colourProtocole, size = 1), axis.ticks.length = unit(0.3, "cm"),plot.title = element_text(colour = colourProtocole)) + }else{ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA)) + } + + if(!(is.null(tab_figure_couleur))){ + gg <- gg + scale_colour_manual(values = figure_couleur,name = "") + scale_fill_manual(values = figure_couleur,name = "",guide=FALSE)} + + ggfile <- paste(nomRep,nomProtocole,"_",m,".png",sep="") + cat("Check",ggfile,":") + ggsave(ggfile,gg) + cat("\n") + flush.console() + } +} + + +############################################################## +gglocal <- function(d, + col_abscisse = "AB_MOYENNE", + figure_abscisse = "Abondance", + col_ordonnee = "DIVERSITE_MOYENNE", + figure_ordonnee = "Diversite", + figure_titre = "Graphe referentiel", + col_filtre = "NOM_RESEAU", + nomGenerique = "GLOBAL", + col_sousGroup = "PARCELLEID", + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= NULL, + colourProtocole = NULL, + nomProtocole = NULL, + couleurLocal="#f609c1", + bagplot = TRUE, + bagProp=c(.05,.5,.95), + seuilSegment=30, + segmentSousSeuil=TRUE, + forcageMajusculeFiltre=TRUE, + forcageMajusculeSousGroupe=TRUE) { + + d$groupe <- d[,col_filtre] + d$abscisse <- d[,col_abscisse] + d$ordonnee <- d[,col_ordonnee] + d$sousGroup <- d[,col_sousGroup] + d$groupe <-gsub("/","_",d$groupe) + d$groupe <-gsub("!","",d$groupe) + d$sousGroup <-gsub("/","_",d$sousGroup) + d$sousGroup <-gsub("!","",d$sousGroup) + if(forcageMajusculeFiltre){ + d$groupe <- toupper(d$groupe)} + if(forcageMajusculeSousGroupe){ + d$sousGroup <- toupper(d$sousGroup)} + d <- subset(d,!(is.na(groupe)) & !(is.na(sousGroup)) & !(is.na(abscisse)) & !(is.na(ordonnee)) & groupe != "") + vecSousGroup <- as.character(unique(d$sousGroup)) + if(is.null(val_filtre)){ + lesModalites <- unique(d$groupe)} + else{ lesModalites <- val_filtre} + repResult <- dir("resultats/") +# if(!(col_filtre %in% repResult)){ +# dir.create(paste("resultats/",col_filtre,sep=""))} +# nomRep1 <- paste("resultats/",col_filtre,"/",sep="") + d.autre <- d + d.autre$groupe <- nomGenerique + for(m in lesModalites) { + d.reseau <- subset(d,groupe==m) + d.reseau$groupe <- m + ggTable <- rbind(d.autre,d.reseau) + seuilResum <- nrow(d.reseau) >= seuilSegment + ggTableResum <- aggregate(cbind(ordonnee, abscisse) ~ groupe, data = ggTable,quantile, c(.25,.5,.75)) + ggTableResum <- data.frame(ggTableResum[,1],ggTableResum[,2][,1:3],ggTableResum[,3][,1:3]) + colnames(ggTableResum) <- c("groupe","ordonnee.inf","ordonnee.med","ordonnee.sup","abscisse.inf","abscisse.med","abscisse.sup") + if(ggTableResum$groupe[2]==nomGenerique){ + ggTableResum <- ggTableResum[c(2,1),]} + if(!(is.null(tab_figure_couleur))) { + if(m %in% tab_figure_couleur$Modalite) { + figure_couleur <- setNames(c(as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == nomGenerique]), + as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == m]),couleurLocal), + c(nomGenerique,m,"")) + } else { + figure_couleur <- setNames(c(as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == nomGenerique]), + as.character(tab_figure_couleur$couleur[tab_figure_couleur$Modalite == ""]),couleurLocal), + c(nomGenerique,m,"")) + } + } +# repResult <- dir(nomRep1) +# if(!(m %in% repResult)){ +# dir.create(paste(nomRep1,m,sep=""))} +# nomRep <- paste(nomRep1,m,"/",sep="") +# if(!is.null(nomProtocole)) { +# repResult <- dir(nomRep) +# if(!(nomProtocole %in% repResult)){ +# dir.create(paste(nomRep,nomProtocole,sep=""))} +# nomRep <- paste(nomRep,nomProtocole,"/",sep="") +# } + d.reseau <- subset(d.reseau, !(is.na(sousGroup))) + figure_size<- setNames(c(1,3,2.5), c(nomGenerique,m,"")) + figure_shape<- setNames(c(16,16,20), c(nomGenerique,m,"")) + vecSousGroup <- as.character(unique(d.reseau$sousGroup)) + for(p in vecSousGroup) { + dp <- subset(d.reseau,sousGroup == p) + dp$groupe <- dp$sousGroup + ggTableSous <- rbind(d.reseau,dp) + ggTableSous <- rbind(d.autre,d.reseau,dp) + names(figure_couleur)[3] <- p + names(figure_shape)[3] <- p + names(figure_size)[3] <- p + gg <- ggplot(ggTableSous,aes(x=abscisse,y=ordonnee,colour=groupe,fill=groupe,shape=groupe,size=groupe)) + if(bagplot){ + gg <- gg + stat_bag(data=d.autre,prop=bagProp[1],colour=NA,alpha=.7) + stat_bag(data=d.autre,prop=bagProp[2],colour=NA,alpha=.4) + stat_bag(data=d.autre,prop=bagProp[3],colour=NA,alpha=.2) + }else{ + gg <- gg + geom_point(alpha=.2)} + gg <- gg + geom_hline(data=subset(ggTableResum,groupe == nomGenerique),aes(yintercept = ordonnee.med,colour=groupe),size=.5,linetype="dashed") + gg <- gg + geom_vline(data=subset(ggTableResum,groupe == nomGenerique),aes(xintercept = abscisse.med,colour=groupe),size=.5,linetype="dashed") + if(segmentSousSeuil) { + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.8,size=2.5) + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.8,size=2.5) + if(!(seuilResum)) { + gg <- gg + geom_segment(data=subset(ggTableResum,groupe!=nomGenerique),aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.5,size = 1.5,colour="white") + gg <- gg + geom_segment(data=subset(ggTableResum,groupe!=nomGenerique),aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.5,size = 1.5,colour="white") + } + } else { + gg <- gg + geom_segment(data=subset(ggTableResum,groupe==nomGenerique),aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.8,size = 2.5) + gg <- gg + geom_segment(data=subset(ggTableResum,groupe==nomGenerique),aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.8,size = 2.5) + } + gg <- gg + geom_point(data=subset(ggTableSous,groupe != nomGenerique)) + if(!(is.null(tab_figure_couleur))){ + gg <- gg + scale_colour_manual(values = figure_couleur,name = "") + scale_fill_manual(values = figure_couleur,name = "",guide=FALSE)} + gg <- gg + scale_shape_manual(values = figure_shape,name = "",guide=FALSE) + scale_size_manual(values = figure_size,guide=FALSE) + gg <- gg + labs(list(title=figure_titre,x=figure_abscisse,y=figure_ordonnee)) + if(!is.null(colourProtocole)){ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA), axis.ticks = element_line(colour = colourProtocole, size = 1), axis.ticks.length = unit(0.3, "cm"),plot.title = element_text(colour = colourProtocole)) } + else{ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA))} + ggfile <- paste(nomRep,nomProtocole,"_",m,"-",p,".png",sep="") + cat("Check",ggfile,":") + ggsave(ggfile,gg) + cat("\n") + flush.console() + } + } +} + + + +##################################################### +ggCompareLevel <- function(d, + col_abscisse = "abond_moyenne", + figure_abscisse = "Abondance", + col_ordonnee = "diversite_moyenne", + figure_ordonnee = "Diversite", + figure_titre = "Rhooo il dechire ce graphe", + col_filtre = "nom_reseau", + nomGenerique = "Global", + val_filtre = NULL, + figure_nom_filtre = NULL, + tab_figure_couleur= NULL, + colourProtocole = NULL, + nomProtocole = NULL, + bagplot = TRUE, + bagProp=c(.05,.5,.95), + seuilSegment=30, + segmentSousSeuil=FALSE, + forcageMajusculeFiltre=TRUE){ + + d$groupe <- d[,col_filtre] + d$abscisse <- d[,col_abscisse] + d$ordonnee <- d[,col_ordonnee] + d$groupe <-gsub("/","_",d$groupe) + d$groupe <-gsub("!","",d$groupe) + + if(forcageMajusculeFiltre){ + d$groupe <- toupper(d$groupe)} + d <- subset(d,!(is.na(groupe)) & !(is.na(abscisse)) & !(is.na(ordonnee)) & groupe != "") + if(is.null(val_filtre)){ + lesModalites <- unique(d$groupe) + }else{ + lesModalites <- val_filtre + } +# repResult <- dir("resultats/") +# if(!(col_filtre %in% repResult)){ +# dir.create(paste("resultats/",col_filtre,sep="")) +# } +# if(!is.null(nomProtocole)){ +# repResult <- dir(paste("resultats/",col_filtre,sep="")) +# if(!(nomProtocole %in% repResult)){ +# dir.create(paste("resultats/",col_filtre,"/",nomProtocole,sep=""))} +# nomRep <- paste("resultats/",col_filtre,"/",nomProtocole,"/",sep="") +# }else{ +# nomRep <- paste("resultats/",col_filtre,"/",sep="") +# } + d.autre <- d + d.autre$groupe <- nomGenerique + d.reseau <- subset(d,groupe %in% lesModalites) + ggTable <- rbind(d.autre,d.reseau) + ggTableResum <- aggregate(cbind(ordonnee, abscisse) ~ groupe, data = ggTable,quantile, c(.25,.5,.75)) + ggTableResum <- data.frame(ggTableResum[,1],ggTableResum[,2][,1:3],ggTableResum[,3][,1:3]) + colnames(ggTableResum) <- c("groupe","ordonnee.inf","ordonnee.med","ordonnee.sup","abscisse.inf","abscisse.med","abscisse.sup") + ggSeuil <- aggregate(ordonnee ~ groupe, data=ggTable,length) + ggSeuil$seuilResum <- ggSeuil$ordonnee >= seuilSegment + colnames(ggSeuil)[ncol(ggSeuil)] <- "seuil" + ggTableResum <- merge(ggTableResum,ggSeuil,by="groupe") + t_figure_couleur <- subset(tab_figure_couleur,Modalite %in% c(nomGenerique,lesModalites)) + modaliteSansCouleur <- lesModalites[(!(lesModalites %in% t_figure_couleur$Modalite))] + nbNxCol <- length(modaliteSansCouleur) + mypalette<-brewer.pal(nbNxCol,"YlGnBu") + figure_couleur <- setNames(c(as.character(t_figure_couleur$couleur),mypalette),c(as.character(t_figure_couleur$Modalite),modaliteSansCouleur)) + tab_coul <- data.frame(groupe=names(figure_couleur),couleur=figure_couleur) + tab_coul <- merge(tab_coul,ggTableResum,"groupe") + tab_coul$nom <- paste(tab_coul$groupe," (",tab_coul$ordonnee,")",sep="") + figure_couleur <- setNames(as.character(tab_coul$couleur),tab_coul$groupe) + figure_couleur_nom<- tab_coul$nom + gg <- ggplot(ggTable,aes(x=abscisse,y=ordonnee,colour=groupe,fill=groupe)) + if(bagplot){ + gg <- gg + stat_bag(data=d.autre,prop=bagProp[1],colour=NA,alpha=.7) + stat_bag(data=d.autre,prop=bagProp[2],colour=NA,alpha=.4) + stat_bag(data=d.autre,prop=bagProp[3],colour=NA,alpha=.2) + }else{ + gg <- gg + geom_point(alpha=.2) + } + gg <- gg + geom_hline(data=subset(ggTableResum,groupe=="Autre"),aes(yintercept = ordonnee.med,colour=groupe),size=.5,linetype="dashed") + geom_vline(data=subset(ggTableResum,groupe=="Autre"),aes(xintercept = abscisse.med,colour=groupe),size=.5,linetype="dashed") + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.7,size = 2.5) + gg <- gg + geom_segment(data=ggTableResum,aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.7,size = 2.5) + if(any(ggTableResum$seuil)){ + gg <- gg + geom_segment(data=subset(ggTableResum,!(seuil)),aes(x = abscisse.med, y = ordonnee.inf, xend = abscisse.med, yend = ordonnee.sup),alpha=.5,size = 1.5,colour="white") + gg <- gg + geom_segment(data=subset(ggTableResum,!(seuil)),aes(x = abscisse.inf, y = ordonnee.med, xend = abscisse.sup, yend = ordonnee.med),alpha=.5,size = 1.5,colour="white") + } + + #browser() # gg <- gg + geom_point(data=d.reseau,size=2) + gg <- gg + scale_colour_manual(values = figure_couleur,name = "",labels = figure_couleur_nom) + scale_fill_manual(values = figure_couleur,name = "",guide=FALSE) + gg <- gg + labs(list(title=figure_titre,x=figure_abscisse,y=figure_ordonnee)) + if(!is.null(colourProtocole)){ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA), axis.ticks = element_line(colour = colourProtocole, size = 1), axis.ticks.length = unit(0.3, "cm"),plot.title = element_text(colour = colourProtocole)) + }else{ + gg <- gg + theme(legend.justification=c(1,0), legend.position=c(1,0),legend.text = element_text(size = 7),legend.background = element_rect(fill=NA)) + } + ggfile <- paste(nomRep,nomProtocole,"_",col_filtre,"_","comparaison.png",sep="") + cat("Check",ggfile,":") + ggsave(ggfile,gg) + cat("\n") +flush.console() +} + + +######################################### + +#Lancement des fonctions : + + #Variables a definir : + +#filename="BDD_PAPILLONS_2016.txt" +#color_filename<-"code_couleurs.csv" + + #func +#func="ggCompareLevel" +#func="ggfiltre1niveau" +#func="gglocal" + + #colSousGroupe +#col_sousGroup_usr = NULL #ggfiltre #ggCompareLevel +#col_sousGroup_usr = "PARCELLENOM" #gglocal + + #vec_col_filtre_usr +#vec_col_filtre_usr = c("CONDUITEPARCELLE") #ggCompareLevel +#vec_col_filtre_usr = c("REGION") #ggfiltre +#vec_col_filtre_usr = c("NOM_RESEAU") #gglocal + + + +#Exe fonction : + +#filtre1niveau(func=func,nom_fichier=filename,nom_fichierCouleur=color_filename,col_sousGroup=NULL) #ggfiltre ou ggCompareLevel, depend de func et de vec_col_filtre_usr +#filtre1niveau(func=func,nom_fichier=filename,nom_fichierCouleur=color_filename,col_sousGroup = col_sousGroup_usr,vec_col_filtre=vec_col_filtre_usr) ## ==local + +######################################################## + +filename=args[2] +color_filename=args[3] +func=args[4] + +if(func=="ggCompareLevel"){ +col_sousGroup_usr=NULL +vec_col_filtre_usr=c("CONDUITEPARCELLE") +}else if(func=="ggfiltre1niveau"){ +col_sousGroup_usr=NULL +vec_col_filtre_usr=c("REGION") +}else if(func=="gglocal"){ +col_sousGroup_usr="PARCELLENOM" +vec_col_filtre_usr=c("NOM_RESEAU") +}else{ +#sortie erreur +write("Error, unknown function. Exit(1).", stderr()) +q('no') +} + +#create result dir +nomRep="resultats/" +dir.create(file.path(".", nomRep), showWarnings = FALSE) + + +filtre1niveau(func=func,nom_fichier=filename,nom_fichierCouleur=color_filename,col_sousGroup=col_sousGroup_usr,vec_col_filtre=vec_col_filtre_usr) diff -r c5a10acd34e3 -r c29354d16967 butterfly_crossplot.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/butterfly_crossplot.xml Mon Aug 13 04:55:07 2018 -0400 @@ -0,0 +1,34 @@ + + + r-ggplot2 + r-rcolorbrewer + + + + + + + + + + + + + function=='ggCompareLevel' + + + + function=='ggfiltre1niveau' + + + + function=='gglocal' + + + + diff -r c5a10acd34e3 -r c29354d16967 clim_data.R --- a/clim_data.R Mon Aug 13 04:47:57 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -#!/usr/bin/env Rscript - - -args <- commandArgs(trailingOnly = TRUE) - -#Rscript clim_data.R 'worldclim' 'var' 'resolution' 'OutputFormat' #'FRA' #'prec1' -if (length(args)==0 | args[1]=="-h" | args[1]=="--help"){ - print ("general script execution : Rscript clim_data.R \'worldclim\' \'var\' resolution \'OutputFormat\' #\'variable-to-plot\' #\'region_code\'") - print ("eg : Rscript clim_data.R \'worldclim\' \'prec\' 10 \'raster\' #\'prec1' #\'FRA\'") - q('no') -} - - -#Climatic variables dictionaries -months<-c("January","February","March","April","May","June","July","August","September","October","November","December") -bioclimatic_vars<-c("Annual Mean Temperature", "Mean Diurnal Range (Mean of monthly (max temp - min temp))", "Isothermality (BIO2/BIO7) (x 100)","Temperature Seasonality (standard deviation x100)","Max Temperature of Warmest Month","Min Temperature of Coldest Month","Temperature Annual Range (BIO5-BIO6)","Mean Temperature of Wettest Quarter","Mean Temperature of Driest Quarter","Mean Temperature of Warmest Quarter","Mean Temperature of Coldest Quarter","Annual Precipitation","Precipitation of Wettest Month","Precipitation of Driest Month","Precipitation Seasonality (Coefficient of Variation)","Precipitation of Wettest Quarter","Precipitation of Driest Quarter","Precipitation of Warmest Quarter","Precipitation of Coldest Quarter") - -#Function to create custom plot title -get_plot_title<-function(usr_var,usr_var_to_plot){ - match<-str_extract(usr_var_to_plot,"[0-9]+") - if(usr_var %in% c("prec","tmin","tmax")){ - printable_var<-(months[as.integer(match)]) - if(usr_var=="prec"){ - printable_var<-paste(printable_var," precipitations (mm)",sep="") - }else if(usr_var=="tmin"){ - printable_var<-paste(printable_var," minimum temperature (°C *10)",sep="") - }else{ - printable_var<-paste(printable_var," maximum temperature (°C *10)",sep="") - } - }else if(usr_var=="bio"){ - printable_var<-(bioclimatic_vars[as.integer(match)]) - printable_var<-paste("Bioclimatic variable - ",printable_var,sep="") - } - title<-paste("Worldclim data - ",printable_var,".",sep="") - return(title) -} - - -#Call libraries -library('raster',quietly=TRUE) -library(sp,quietly = TRUE, warn.conflicts = FALSE) -library(ncdf4,quietly = TRUE, warn.conflicts = FALSE) -#library(rgdal,quietly = TRUE, warn.conflicts = FALSE) #To save as geotif -library(stringr) - - -#Get args -usr_data=args[1] -usr_var=args[2] -usr_res=as.numeric(args[3]) -usr_of=args[4] - - -# Retrieve 'var' data from WorldClim -global.var <- getData(usr_data, download = TRUE, var = usr_var, res = usr_res) - -# Check if we actualy get some -if (length(global.var)==0){ - cat("No data found.") -}else{ - writeRaster(global.var, "output_writeRaster", format=usr_of,overwrite=TRUE) - final_msg<-paste("WorldClim data for ", usr_var, " at resolution ", usr_res, " in ", usr_of, " format\n", sep="") - cat(final_msg) -} - - - - - - -################# -##Visualisation## -################# - -#Get args -if(length(args[5])>=0 && length(args[6])>=0){ - usr_var_to_plot=args[5] - usr_plot_region=args[6] -}else{q('no')} - -list_region_mask<-c("FRA","DEU","GBR","ESP","ITA") - -if(usr_plot_region %in% list_region_mask){ -#Country mask - region <- getData("GADM",country=usr_plot_region,level=0) - region_mask <- mask(global.var, region) - region_var_to_plot_expression<-paste("region_mask$",usr_var_to_plot,sep="") -}else{ #All map and resize manualy - region_var_to_plot_expression<-paste("global.var$",usr_var_to_plot,sep="") -} - - -region_var_to_plot<-eval(parse(text=region_var_to_plot_expression)) - -#PLotmap -jpeg(file="worldclim_plot_usr_region.jpeg",bg="white") - -title<-get_plot_title(usr_var,usr_var_to_plot) - - -if(usr_plot_region=="FRA"){ - #FRA - plot(region_var_to_plot, xlim = c(-7, 12), ylim = c(40, 52), axes=TRUE,xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="GBR"){ - #GBR - plot(region_var_to_plot, xlim = c(-10, 5), ylim = c(46, 63), axes=TRUE,xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="NA"){ - #North America : - plot(region_ar_to_plot,xlim=c(-180,-50),ylim=c(10,75),xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="EU"){ - #Europe - plot(region_var_to_plot,xlim=c(-28,48),ylim=c(34,72),xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="DEU"){ - #DEU - plot(region_var_to_plot, xlim = c(5, 15), ylim = c(45, 57),axes=TRUE,xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="ESP"){ - #ESP - plot(region_var_to_plot, xlim = c(-10, 6), ylim = c(35, 45), axes=TRUE,xlab="Longitude",ylab="Latitude", main=title) -}else if(usr_plot_region=="ITA"){ - #ITA - plot(region_var_to_plot, xlim = c(4, 20), ylim = c(35, 48), axes=TRUE,xlab="Longitude",ylab="Latitude", main=title) -}else if(usr_plot_region=="WM"){ - #Worldmap - plot(region_var_to_plot,xlab="Longitude",ylab="Latitude",main=title) -}else if(usr_plot_region=="AUS"){ - #AUS - plot(region_var_to_plot,xlim=c(110,155),ylim=c(-45,-10),xlab="Longitude",ylab="Latitude",axes=TRUE,main=title) -}else{ - write("Error with country code.", stderr()) - q('no') -} - -garbage_output<-dev.off - -#Exit -q('no') diff -r c5a10acd34e3 -r c29354d16967 code_couleurs.csv --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/code_couleurs.csv Mon Aug 13 04:55:07 2018 -0400 @@ -0,0 +1,24 @@ +Filtre;Modalite;couleur +TYPECULTURE;ARBORICULTURE;"#006600" +TYPECULTURE;AUTRE_CULTURE_PERENNE;"#FF5050" +TYPECULTURE;GRANDE_CULTURE;"#FFC000" +TYPECULTURE;MARAICHAGE;"#FF6600" +TYPECULTURE;PRAIRIE;"#97B314" +TYPECULTURE;VITICULTURE;"#660066" +NOM_RESEAU;;"#31849B" +Protocole;Abeilles;"#EE7F00" +Protocole;Invertebres;"#97B314" +Protocole;Papillons;"#009EE0" +Protocole;Vers de terre;"#666666" +TYPECULTURE;GLOBAL;"#9f0d0d" +NOM_RESEAU;GLOBAL;"#9f0d0d" +REGIONNAME;;"#31849B" +REGIONNAME;GLOBAL;"#9f0d0d" +ANNEE;;"#31849B" +ANNEE;GLOBAL;"#9f0d0d" +REGION;GLOBAL;"#9f0d0d" +REGION;;"#666666" +CONDUITEPARCELLE;;"#31849B" +CONDUITEPARCELLE;GLOBAL;"#9f0d0d" +TRAVAILSOL;;"#31849B" +TRAVAILSOL;GLOBAL;"#9f0d0d" \ No newline at end of file diff -r c5a10acd34e3 -r c29354d16967 raster_getdata.xml --- a/raster_getdata.xml Mon Aug 13 04:47:57 2018 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,208 +0,0 @@ - - - - - - r-getopt - r-ncdf4 - r-raster - r-stringr - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - usr_of=='CDF' - - - usr_of=='raster' - - - usr_of=='raster' - - - plot=='yes_plot' - - - - diff -r c5a10acd34e3 -r c29354d16967 stat_bag.r --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/stat_bag.r Mon Aug 13 04:55:07 2018 -0400 @@ -0,0 +1,145 @@ +library(ggplot2) +StatBag <- ggproto("Statbag", Stat, + compute_group = function(data, scales, prop = 0.5) { + + ################################# + ################################# + # originally from aplpack package, plotting functions removed + plothulls_ <- function(x, y, fraction, n.hull = 1, + col.hull, lty.hull, lwd.hull, density=0, ...){ + # function for data peeling: + # x,y : data + # fraction.in.inner.hull : max percentage of points within the hull to be drawn + # n.hull : number of hulls to be plotted (if there is no fractiion argument) + # col.hull, lty.hull, lwd.hull : style of hull line + # plotting bits have been removed, BM 160321 + # pw 130524 + if(ncol(x) == 2){ y <- x[,2]; x <- x[,1] } + n <- length(x) + if(!missing(fraction)) { # find special hull + n.hull <- 1 + if(missing(col.hull)) col.hull <- 1 + if(missing(lty.hull)) lty.hull <- 1 + if(missing(lwd.hull)) lwd.hull <- 1 + x.old <- x; y.old <- y + idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] + for( i in 1:(length(x)/3)){ + x <- x[-idx]; y <- y[-idx] + if( (length(x)/n) < fraction ){ + return(cbind(x.hull,y.hull)) + } + idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx]; + } + } + if(missing(col.hull)) col.hull <- 1:n.hull + if(length(col.hull)) col.hull <- rep(col.hull,n.hull) + if(missing(lty.hull)) lty.hull <- 1:n.hull + if(length(lty.hull)) lty.hull <- rep(lty.hull,n.hull) + if(missing(lwd.hull)) lwd.hull <- 1 + if(length(lwd.hull)) lwd.hull <- rep(lwd.hull,n.hull) + result <- NULL + for( i in 1:n.hull){ + idx <- chull(x,y); x.hull <- x[idx]; y.hull <- y[idx] + result <- c(result, list( cbind(x.hull,y.hull) )) + x <- x[-idx]; y <- y[-idx] + if(0 == length(x)) return(result) + } + result + } # end of definition of plothulls + ################################# + + + # prepare data to go into function below + the_matrix <- matrix(data = c(data$x, data$y), ncol = 2) + + # get data out of function as df with names + setNames(data.frame(plothulls_(the_matrix, fraction = prop)), nm = c("x", "y")) + # how can we get the hull and loop vertices passed on also? + }, + + required_aes = c("x", "y") +) + +#' @inheritParams ggplot2::stat_identity +#' @param prop Proportion of all the points to be included in the bag (default is 0.5) +stat_bag <- function(mapping = NULL, data = NULL, geom = "polygon", + position = "identity", na.rm = FALSE, show.legend = NA, + inherit.aes = TRUE, prop = 0.5, alpha = 0.3, ...) { + layer( + stat = StatBag, data = data, mapping = mapping, geom = geom, + position = position, show.legend = show.legend, inherit.aes = inherit.aes, + params = list(na.rm = na.rm, prop = prop, alpha = alpha, ...) + ) +} + + +geom_bag <- function(mapping = NULL, data = NULL, + stat = "identity", position = "identity", + prop = 0.5, + alpha = 0.3, + ..., + na.rm = FALSE, + show.legend = NA, + inherit.aes = TRUE) { + layer( + data = data, + mapping = mapping, + stat = StatBag, + geom = GeomBag, + position = position, + show.legend = show.legend, + inherit.aes = inherit.aes, + params = list( + na.rm = na.rm, + alpha = alpha, + prop = prop, + ... + ) + ) +} + +#' @rdname ggplot2-ggproto +#' @format NULL +#' @usage NULL +#' @export +GeomBag <- ggproto("GeomBag", Geom, + draw_group = function(data, panel_scales, coord) { + n <- nrow(data) + if (n == 1) return(zeroGrob()) + + munched <- coord_munch(coord, data, panel_scales) + # Sort by group to make sure that colors, fill, etc. come in same order + munched <- munched[order(munched$group), ] + + # For gpar(), there is one entry per polygon (not one entry per point). + # We'll pull the first value from each group, and assume all these values + # are the same within each group. + first_idx <- !duplicated(munched$group) + first_rows <- munched[first_idx, ] + + ggplot2:::ggname("geom_bag", + grid:::polygonGrob(munched$x, munched$y, default.units = "native", + id = munched$group, + gp = grid::gpar( + col = first_rows$colour, + fill = alpha(first_rows$fill, first_rows$alpha), + lwd = first_rows$size * .pt, + lty = first_rows$linetype + ) + ) + ) + + + }, + + default_aes = aes(colour = "NA", fill = "grey20", size = 0.5, linetype = 1, + alpha = NA, prop = 0.5), + + handle_na = function(data, params) { + data + }, + + required_aes = c("x", "y"), + + draw_key = draw_key_polygon +)