Created
March 11, 2010 00:50
-
-
Save pecard/328673 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! Cartografia de dados distribuição aves - LOOP GGPLOT | |
#! Paulo E. Cardoso | |
#! Código Cores Hexadecimais - Normas Strix | |
#! Verde claro (#7FC31C), Verde escuro (#292F19), Laranja (#FF7F00), Azul claro (#80CECF) | |
#! OBJECTOS IMPORTANTES | |
#! tabAtlasT - Sumario Abundancias totais das especies por Quadricula/Epoca/Area | |
#!== Packages necessários: | |
#! check for packages available on disk or istall it from internet cran repository | |
#if (!require(sp)) install.packages("sp",r epos = "http://cran.r-project.org");library(sp) | |
#if (!require(maptools)) install.packages("maptools", repos = "http://cran.r-project.org");library(maptools) | |
if (!require(ggplot2)) install.packages("ggplot2", repos = "http://cran.r-project.org"); library(ggplot2) | |
if (!require(grDevices)) install.packages("grDevices", repos = "http://cran.r-project.org"); library(grDevices) | |
if (!require(RColorBrewer)) install.packages("RColorBrewer", repos = "http://cran.r-project.org");library(RColorBrewer) | |
if (!require(methods)) install.packages("methods", repos = "http://cran.r-project.org");library(methods) | |
#if (!require(vegan)) install.packages("vegan", repos = "http://cran.r-project.org"); library(vegan) | |
#if (!require(maps)) install.packages("maps", repos = "http://cran.r-project.org"); library(maps) | |
if (!require(grid)) install.packages("grid", repos = "http://cran.r-project.org"); library(grid) | |
if (!require(Hmisc)) install.packages("Hmisc", repos = "http://cran.r-project.org"); library(Hmisc) | |
#if (!require(gdata)) install.packages("gdata",repos = "http://cran.r-project.org");library(gdata) | |
#! drop.levels(x, reorder=TRUE, ...) do package gdata - TESTAR | |
#!======================================================================================================= | |
#! ==================================== Abrir Workspace ================================================= | |
load('D:/...Rdata') | |
#!=========================== Criar objecto para directorio de trabalho ================================= | |
wd<-file.path(chartr("\\", "/", "D:\\...")) | |
#!======================================================================================================= | |
#! =============================== ELEMENTOS DE BASE PARA AS ANÁLISES =================================== | |
#!======================================================================================================= | |
#! =================================== Leitura das Shapefiles =========================================== | |
#! As grelhas APENAS devem conter a coluna Quad: código da quadrícula | |
#! ==== Grelha completa ============== | |
#! shapefile | |
grelha <- readShapeSpatial('D:/Strix/EdiaAlvitoMNovoPisao/Shp/grelha_total_montenovo_alvito_pisao.shp') | |
grelhaCentroide <- data.frame(coordinates(grelha)) #1 Centroides dos polígonos | |
#! Dataframe com a ordem das quadículas na shapefile e o respectivo ID (código) | |
grelhaID <- data.frame(grelha@data, idI = seq(1 : nrow(grelha@data))) | |
grelhaID <- cbind(grelhaID, grelhaCentroide) | |
levels(grelhaID$Bloco)[3] <- "PI" # apenas nesta função para corrigir o código | |
win.graph(); plot(grelhaID$X1, grelhaID$X2, asp = 1, pch = 19); text(grelhaID$X1, grelhaID$X2 + 300, | |
labels = grelhaID$Quad, cex = 0.8) | |
#! ==== Monte Novo =================== | |
grelhaMN <- readShapeSpatial(paste(wd, "Shp\\grelha_mte-nov.shp",sep='')) | |
grelhaMNCentr <- data.frame(coordinates(grelhaMN)) #! Centroide da grelha | |
#! Dataframe com a ordem ads quadículas na shapefile e o respectivo ID (código) | |
grelhaMNID <- data.frame(grelhaMN@data, idI = seq(1 : nrow(grelhaMN@data))) | |
grelhaMNID <- cbind(grelhaMNID, grelhaMNCentr) | |
win.graph(); plot(grelhaMNID$X1, grelhaMNID$X2, asp = 1, pch = 19); text(grelhaMNID$X1, grelhaMNID$X2 + 200, | |
labels = grelhaMNID$Quad, cex = 0.7) | |
#! ==== Alvito Pisao ================= | |
grelhaAP <- readShapeSpatial('D:/Strix/EdiaAlvitoMNovoPisao/Shp/grelha_alvito-pisao.shp') | |
grelhaAPCentr <- data.frame(coordinates(grelhaAP)) #! Centroide da grelha | |
#! Dataframe com a ordem ads quadículas na shapefile e o respectivo ID (código) | |
grelhaAPID <- data.frame(grelhaAP@data, idI = seq(1 : nrow(grelhaAP@data))) | |
grelhaAPID <- cbind(grelhaAPID, grelhaAPCentr) | |
win.graph(); plot(grelhaAPID$X1, grelhaAPID$X2, asp = 1, pch = 19); text(grelhaAPID$X1, grelhaAPID$X2 + 200, | |
labels = grelhaAPID$Quad, cex = 0.7) | |
#! ==== Pisao ======================== | |
grelhaP <- readShapeSpatial(paste(wd, "Shp\\grelha_pisao.shp", sep = '')) | |
grelhaPCentr <- data.frame(coordinates(grelhaP)) #! Centroide da grelha | |
#! Dataframe com a ordem das quadículas na shapefile e o respectivo ID (código) | |
grelhaPID <- data.frame(grelhaP@data, idI = seq(1 : nrow(grelhaP@data))) | |
grelhaPID <- cbind(grelhaPID, grelhaPCentr); grelhaPID | |
win.graph(); plot(grelhaPID$X1, grelhaPID$X2, asp = 1, pch = 19); text(grelhaPID$X1, grelhaPID$X2 + 200, | |
labels = grelhaPID$Quad, cex = 0.7) | |
#!======================================================================================================= | |
#!============================ Leitura dos ficheiros txt tab delimited ================================== | |
#!======================================================================================================= | |
#! === Tabela completa com os dados dos censos de aves 2008 ============================================= | |
tab <- read.table(paste(wd, "R\\Dados_Atlas_MN_Pisao_R.txt", sep=''), sep = "\t", dec = ".", header = T) | |
tab$Esp <- as.character(tab$Esp) | |
tab$Area <- as.character(tab$Area) | |
#tab$calendario <- as.POSIXct(strptime(tab$Data,"%d-%m-%Y")) #! Neste caso não ha dados de calendario | |
#tab$HoraH <- cut(tab$calendario,"hour", include.lowest=T) | |
#tab$HoraH <- substring(tab$HoraH,12,16) | |
#! Corrigir o nome da área do Pisao para PI | |
tab$Area[tab$Area == "P"] <- "PI" | |
#!======================================================================================================= | |
#! === Tabela com dados de Nidificação da Primavera de 2008 | |
tab_Nid <- read.table(paste(wd, "/Analise/Nidificacao_2008_R.txt", sep=''), sep = "\t", dec = ".", header = T) | |
tab_Nid$Epoca <- "Primavera" | |
tab_Nid_ctd <- merge(tab_Nid, grelhaID, by = "Quad", all.x = T) | |
names(tab_Nid_ctd)[8:9] <- c("Xctd", "Yctd") | |
#!======================================================================================================= | |
#!======================================================================================================= | |
#! === Tabela completa com os dados dos censos de aves 2007 MATOS e FONSECA | |
tab2007 <- read.table(paste(wd, "R/Tabelas/BD_2007_Matos_Associados_Primav.txt", sep=''), sep = "\t", dec = ".", | |
stringsAsFactors = F, header = T) | |
#! Retirar observações que nao sejam Sistematicas e remover duplas entradas, se existentes | |
tab2007 <- tab2007[tab2007$Tipo_de_visita == "Sistemática", ] | |
#! Teste à tabela | |
#as.data.frame(table(paste(tab2007$Quad,tab2007$Species,sep=""))) #! se Freq > 1 == Erro! | |
#! Correcção da tabela para analise de presenças / ausencias | |
tab2007 <- ddply(tab2007[ ,c(8, 9, 3)], c("Quad", "Species"), summarize, "Presenca" = length(N_indiv)) | |
tab2007$Presenca[tab2007$Presenca > 1] <- 1 | |
tab2007$Ano <- 2007 | |
#!======================================================================================================= | |
#! ========== Tabela com a Ordem (taxonómica) e Ecologia (Esteparias/Não estepária) e Rapinas =========== | |
Tax_Ecol <- read.csv(paste(wd, "R/Dados_Atlas_MN_Pisao_Taxon_R.csv", sep = ''),sep = ';', header = T, as.is = T) | |
Tax_Ecol <- Tax_Ecol[order(Tax_Ecol$ID_sistematica), ] | |
#! ====================================================================================================== | |
#! ===================================== ANÁLISES DE DADOS ============================================== | |
#! ====================================================================================================== | |
#! =============================== Função para contagem de factores ===================================== | |
func <- function(x = x)length(unique(x)) | |
#! ======================== Tabela sem os dados suplementares - tabAtlas ================================ | |
tabAtlas <- tab[tab$Tipo.info < 6, ] #! Tabela sem os dados onde Tipo.info < 6 | |
#tabAtlas$Quad <- tabAtlas$Quad[,drop = T] #! Elimina factores não utilizados | |
#! Remove quadrículas não amostradas - Neste caso Quadrícula 6 | |
tabAtlas <- tabAtlas[!is.na(tabAtlas$Quad == T), ] | |
#! ====================================================================================================== | |
#! ==== Abundancia total das especie por Quadricula/Epoca/Area - somatorio das bandas de observação ===== | |
#! ====================================================================================================== | |
#! Sumario Quadricula/Epoca/Area/Ntotal | |
tabAtlasT <- ddply(tabAtlas, c("Quad", "Epoca", "Area", "Esp"), summarize, NTot = sum(N)) | |
tabAtlasT$Esp <- as.character(tabAtlasT$Esp) | |
#tabAtlasT$AreaEpoca <- paste(tabAtlasT$Area, substr(tabAtlasT$Epoca, 1, 3),sep = '') | |
#! ==== Analise das distribuiçoes de NTot nas diferentes areas de estudo ================================ | |
ddply(tabAtlasT, c("Area","Epoca"), summarize, "Media" = mean(NTot), "Mediana" = median(NTot, na.rm = T),"Max" = max(NTot)) | |
win.graph(20, 20) | |
boxplot(tabAtlasT$NTot[tabAtlasT$Area == "MN" & tabAtlasT$Epoca == "Primavera" ], main = "MN Primavera", xlab = "Abundância (N)", outline = F) | |
hist(tabAtlasT$NTot[tabAtlasT$Area == "PI" & tabAtlasT$Epoca == "Inverno"], breaks = 100, main = "P Inverno", xlab = "Abundância (N)") | |
#! ====================================================================================================== | |
#! ====================================================================================================== | |
#! ================================ Cartografias com os elementos SIG =================================== | |
#! ====================================================================================================== | |
#! Código Cores Hexadecimais - Normas Strix | |
#! Verde claro (#7FC31C), Verde escuro (#292F19), Laranja (#FF7F00), Azul claro (#80CECF) | |
#! ==================================== Converte SPolyDF em List ======================================== | |
#! grelha[grelha@data$Bloco=="P",] tambem gera um SPDFrame para um loop - Testar | |
#! Converte SPDF em List | |
grelhamapAP <- lapply(slot(grelhaAP, "polygons"), function(x) lapply(slot(x, "Polygons"), function(y) slot(y, "coords"))) | |
grelhamapMN <- lapply(slot(grelhaMN, "polygons"), function(x) lapply(slot(x, "Polygons"), function(y) slot(y, "coords"))) | |
grelhamapP <- lapply(slot(grelhaP, "polygons"), function(x) lapply(slot(x, "Polygons"), function(y) slot(y, "coords"))) | |
#! ========================= Construcao do objecto legível pelo gpackage ggplot2 ========================= | |
#! ==== Alvito Pisao ================= | |
dfTmp <- list() | |
for (i in 1 : dim(summary(grelhamapAP))[1]) | |
{ | |
#! Adiciona o código e a ordem das coordenadas à cada linha | |
dfTmp[[i]] <- data.frame(grelhamapAP[i], "Id" = i-1, "Ordem" = seq(1 : 5), "Quad" = grelhaAP@data[[1]][i]) | |
} | |
dfGridAP <- do.call(rbind, dfTmp) #! Obtem-se um Dataframe para o ggplot2 a partir do objecto List | |
dfGridAP$id <- as.numeric(row.names(dfGridAP)) | |
win.graph(); ggplot(dfGridAP, aes(x = X1,y = X2)) + | |
geom_polygon(aes(group = Id, fill = Id), colour = "black") + | |
coord_equal() | |
#! ==== Monten Novo ================== | |
dfTmp <- list() | |
for (i in 1 : dim(summary(grelhamapMN))[1]) | |
{ | |
#! Adiciona o código e a ordem das coordenadas à cada linha | |
dfTmp[[i]] <- data.frame(grelhamapMN[i], "Id" = i-1, "Ordem" = seq(1 : 5), "Quad" = grelhaMN@data[[1]][i]) | |
} | |
dfGridMN <- do.call(rbind, dfTmp) #! Obtem-se um Dataframe para o ggplot2 a partir do objecto List | |
dfGridMN$id <- as.numeric(row.names(dfGridMN)) | |
win.graph(); ggplot(dfGridMN, aes(x = X1,y = X2)) + | |
geom_polygon(aes(group = Id, fill = Id), colour = "black") + | |
coord_equal() | |
#! ==== Pisao ======================== | |
dfTmp <- list() | |
for (i in 1 : dim(summary(grelhamapP))[1]) | |
{ | |
#! Adiciona o código e a ordem das coordenadas à cada linha | |
dfTmp[[i]] <- data.frame(grelhamapP[i], "Id" = i-1, "Ordem" = seq(1 : 5), "Quad" = grelhaP@data[[1]][i]) | |
} | |
dfGridP <- do.call(rbind, dfTmp) #! Obtem-se um Dataframe para o ggplot2 a partir do objecto List | |
dfGridP$id <- as.numeric(row.names(dfGridP)) | |
win.graph(); ggplot(dfGridP, aes(x = X1,y = X2)) + | |
geom_polygon(aes(group = Id, fill = Id), colour = "black") + | |
coord_equal() | |
#! ====================================================================================================== | |
#! =========================================== MAPAS DE DISTRIBUIÇÃO ==================================== | |
#! ====================================================================================================== | |
#! Localidades na área de estudo | |
Loc <- data.frame(Area = c("MN", "PI", "AP"), | |
Local = c("São Manços", "Beringel", "Cuba"), | |
X1 = c(233351.3, 213003.0, 221160.4), | |
X2 = c(165741.6, 121132.0, 133166.3)) | |
#! Lista das dataframes das quadriculas das areas | |
grelhas <- list("MN" = as.list(dfGridMN), "AP" = as.list(dfGridAP), "PI" = as.list(dfGridP)) | |
#! Paleta de Cores para cada Area | |
win.graph(); RColorBrewer::display.brewer.all() #! Escolha do espaço de cores | |
#paleta <- as.factor(c("#FFFFFF",brewer.pal(6,"YlOrRd"))) | |
#! ================================ LOOP para MAPA Area/Especie/Epoca ======================== | |
#! Contrução das classes de abundancia para cada area (totalmente arbitrario) | |
classes <- read.table(paste(wd, "R/Tabelas/classes abundancias MNAP2009.txt", sep=""), | |
header=T, sep="\t",stringsAsFactors=F) | |
#! Opção legenda com inicio e fim iguais | |
nomes_classes_abundancias <- c("0", "[1, 3)", "[3, 5)", "[5, 10)", "[10, 25)", "[25, 50)", "> 50") | |
#! Preparar tabela tabAtlas para a conjugaçao das paletas de cores distintas para as areas/epocas | |
for(aa in unique(tabAtlasT$Area)) #! 1 Áreas de estudo | |
{ | |
#! === 1 - Reconstroi o data.frame a partir da lista com as grelhas separadas | |
gridArea_a_e <- as.data.frame(grelhas[[substr(aa, 1, 2)]]) | |
#for(ee in unique(tabAtlasT$Epoca)) #! 2 Época de amostragem | |
for(ee in "Primavera") #! 2 Época de amostragem | |
{ | |
#! === 2 - Isolar a grelha para cada uma das áreas tres de estudo | |
tabAtlasT_ae <- subset(tabAtlasT, Area == aa & Epoca == ee) #! Cria o subset de dados para a Area hh | |
#! === 3 - Cria classe de abundancia com base nos quantis de distribuiçao de NTot | |
tabAtlasT_ae$classeN <- as.factor(cut2(tabAtlasT_ae$NTot, cuts = subset(classes, Area == aa & Epoca == ee)$Classe, digits = 4, onlycuts = F)) | |
#! === 4 - Associa o nome à paleta criada | |
paleta <- as.factor(c("#FFFFFF", brewer.pal((length(levels(tabAtlasT_ae$classeN))) - 1, "YlOrRd"))) | |
names(paleta)[1 : length(paleta)] <- levels(tabAtlasT_ae$classeN) | |
#! === 5 - Associa a informação taxonomica à tabela com a subamostra | |
tabAtlasT_ae_tax <- merge(tabAtlasT_ae, Tax_Ecol, by.x = "Esp",by.y = "Esp", all.x = T) | |
tabAtlasT_ae_tax <- tabAtlasT_ae_tax[order(tabAtlasT_ae_tax$ID_sistematica), ] | |
#! === 6- Classes de Abundancias totais para as especies observadas em cada bloco | |
espList <- unique(tabAtlasT_ae_tax$Esp) #! Espécies ordenadas por ordem taxonómica (filogenética) espList<-espList[1:2] | |
espList <- espList[15 : 17] #! subgrupo para teste | |
for(i in espList) #! 3 Especie | |
{ | |
#! === 7 - Subset da tabela de dados apenas para a espécie i | |
spi<-tabAtlasT_ae_tax[tabAtlasT_ae_tax$Esp==i, ] | |
#! === 8 - Abundancias minima e maxima para a especie i | |
min_spi <- min(spi$NTot); max_spi <- max(spi$NTot) | |
#! === 9 - Merge da dataframe com os dados da espécie na dataframe com a Grelha da área aa | |
gridArea_a_e_esp <- merge(gridArea_a_e, spi, by.x = "Quad", by.y = "Quad", all.x = T) | |
gridArea_a_e_esp$NTot[is.na(gridArea_a_e_esp$NTot)] <- 0 | |
gridArea_a_e_esp$classeN[is.na(gridArea_a_e_esp$classeN == T)] <- levels(gridArea_a_e_esp$classeN)[1] | |
gridArea_a_e_esp <- gridArea_a_e_esp[order(gridArea_a_e_esp$id, gridArea_a_e_esp$Id), ] | |
#! === 10 - Subset da tabela de dados de nidificação apenas para a espécie i | |
tab_Nid_ae <- subset(tab_Nid_ctd, Esp == i & Bloco == aa) | |
tab_Nid_ae <- tab_Nid_ae[tab_Nid_ae$Quad %in% gridArea_a_e_esp$Quad[gridArea_a_e_esp$NTot != 0], ] | |
#gridArea_a_e_esp_Nid <- merge(gridArea_a_e_esp, tab_Nid_ae, by.x = "Quad", by.y = "Quad", all.x = T) | |
#gridArea_a_e_esp_Nid <- gridArea_a_e_esp_Nid[order(gridArea_a_e_esp_Nid$id, gridArea_a_e_esp_Nid$Id), ] | |
#gridArea_a_e_esp_Nid[is.na(gridArea_a_e_esp_Nid$Nidific) == F, ] | |
#! === 11 - Titulos do gráfico - não consigo alterar a formataçção da fonte no titulo | |
nomeComum_esp <- paste(Tax_Ecol$Nomecomum[Tax_Ecol$Esp == i], " ", sep = "") | |
nomeCient_esp <- Tax_Ecol$Nome[Tax_Ecol$Esp == i] | |
#! === 11 - Construção do gráfico para a espécie i | |
graph <- ggplot(gridArea_a_e_esp, aes(x = X1,y = X2)) + | |
geom_polygon(aes(group = Id, fill = as.factor(classeN)), colour = "grey80") + | |
coord_equal() + | |
scale_fill_manual(paste("Estação: ", ee, "\nAbundâncias", "\nIntervalo: ", min_spi, " - ", max_spi, sep = ""), | |
values = paleta, labels = c("0", "[1, 3)", "[3, 5)", "[5, 10)", "[10, 25)", "[25, 50)", "> 50")) + | |
scale_y_continuous("Coordenada Y") + | |
scale_x_continuous("Coordenada X") + | |
#! Opçoes de formataçao | |
opts(#!legend.position = "none", - Para eliminar a legenda, se necessario | |
title = paste(nomeComum_esp, nomeCient_esp), #! Titulo do grafico | |
plot.title = theme_text(size = 12,face = "italic"), #! Formataçao do titulo do grafico | |
axis.text.x = theme_text(hjust = 0.5,vjust = 1.2, size = 10,col = "grey50"), #! altera a formataçao do png (?) | |
axis.text.y = theme_text(hjust = 0.5, vjust = 0, size = 10,col = "grey50", angle = 90), | |
axis.title.x = theme_text(size = 10), | |
axis.title.y = theme_text(size = 10, angle = 90), | |
legend.title = theme_text(hjust = 0,size = 10, face = "bold"), | |
legend.text = theme_text(hjust = -0.2, size = 10)) + | |
#! Sobrepor pontos com código de nidificação | |
geom_point(aes(x = Xctd, y = Yctd, shape = Nidific), colour = "grey30", data = tab_Nid_ae, size = 2) + | |
scale_shape(name="Nidificação", solid = F, labels = c("Confirmada", "Possível", "Provável")) | |
#! Adicionar pontos que podem representar localidades, outras referencias | |
#geom_point(aes(x = X1, y = X2), colour = "black",data = | |
# data.frame(X1 = Loc$X1[Loc$Area == substr(aa, 1, 2)], | |
# X2 = Loc$X2[Loc$Area == substr(aa, 1, 2)]), size = 2.5) + | |
#geom_text(aes(x = X1, y = X2, label = Loc$Local[Loc$Area == substr(aa, 1, 2)]), colour = "black", | |
# data = data.frame(X1 = Loc$X1[Loc$Area == substr(aa, 1, 2)] + 900, | |
# X2 = Loc$X2[Loc$Area == substr(aa, 1, 2)] - 0), size = 3) | |
#! Exportar o grafico como imagem - neste caso um png com 500x430px (arbitrario e ajustado manualmente) | |
#! Calcular a dimensão: X cm / 0.03527 = Y dpi | |
#! As ordem das imagens produzidas será pela ordem taxonomica. | |
#! === 12 - Exporta o gráfico para a espécie i para um ficheiro | |
png(bg = "transparent", width = 425, height = 335, file = paste("D:\\...", | |
Tax_Ecol$ID_sistematica[Tax_Ecol$Esp == i], "-",Tax_Ecol$Nome[Tax_Ecol$Esp == i], "-EDIA_MNAP_", aa,"_",ee,".png", sep = "")) | |
print(graph) #! Um objecto tipo trellis necessita de ser recuperado com print() | |
dev.off() #! Encerra o png | |
graphics.off() #! Encerra qualquer graphical device que possa estar aberto | |
} #! 3 | |
} #! 2 | |
} #!1 | |
graphics.off() | |
#!======================================================================================================= | |
#! Comparaçao entre os diferentes anos de amostragem para a PRIMAVERA | |
#! Não houve uma metodologia comum entre os anos | |
#! A metodologia de 2007 considerou 20min de censos | |
#! Enquanto em 2008 os censos tiveram apenas 15 min | |
#! Por esta razao so serao comparaveis as presenças/ausencias nas quadriculas. | |
#!======================================================================================================= | |
tab2008 <- tabAtlasT[tabAtlasT$Epoca == "Primavera", ] | |
tab2008$Epoca <- tab2008$Epoca[,drop = T] | |
#! === Tabela para presenças ausências dos dados de 2008 - Strix | |
tab2008pa <- tab2008[ ,c(1, 4)] | |
tab2008pa$Presenca <- 2 | |
tab2008pa$Ano <- 2008 | |
#! === Tabela para presenças ausências dos dados de 2007 | |
tab2007pa <- tab2007 | |
names(tab2007pa) <- names(tab2008pa) #! Apenas porqie diferiam na tabela original. Garantir que a ordem é a mesma | |
#! === Combina as tabelas dos dois anos | |
tab_pa <- rbind(tab2008pa, tab2007pa) | |
tab_Anos <- melt(cast(tab_pa[ ,-4],Quad ~ Esp, sum), id = c("Quad", "Esp")) | |
tab_Anos$value <- as.factor(tab_Anos$value) | |
#! Adiciona o código da área de estudo | |
tab_compara_Anos <- merge(tab_Anos,grelhaID[ ,1:2],by = "Quad") | |
#! Corrige a discrepancia no código do Bloco do Pisao (P vs PI) | |
tab_compara_Anos$Bloco <- as.character(tab_compara_Anos$Bloco) | |
tab_compara_Anos$Bloco[tab_compara_Anos$Bloco=="P"] <- "PI" | |
#! =================================== LOOP para Comparação Anos/Primavera ============================== | |
#! Paleta de cores para os mapas | |
paleta_compara_Anos <- as.factor(c("#FFFFFF", "#66CCCC", "#2E5C8A", "#B87A3D")) | |
names(paleta_compara_Anos) <- c("0","1","2","3") | |
for(hh in c("MN", "AP", "PI")) #! 1 | |
{ | |
#! === 1 - Isolar a grelha para cada uma das áreas tres de estudo | |
tab_cAnos_subArea <- subset(tab_compara_Anos, Bloco == hh) #! Cria o subset de dados para a Area hh | |
#! === 2 - Associa a informação taxonomica à tabela com a subamostra | |
tab_cAnos_subArea <- merge(tab_cAnos_subArea, Tax_Ecol, by.x = "Esp",by.y = "Esp", all.x = T) | |
tab_cAnos_subArea <- tab_cAnos_subArea[order(tab_cAnos_subArea$ID_sistematica), ] #! Ordena pela Taxonomia | |
#! === 4 - Classes de Abundancias totais para as especies observadas em cada bloco | |
espList_compara_Anos <- unique(tab_cAnos_subArea$Esp) #! Espécies ordenadas por ordem taxonómica (filogenética) espList<-espList[1:2] | |
#espList_compara_Anos <- espList[10 : 15] #! subgrupo para teste | |
for(i in espList_compara_Anos) #! 2 | |
{ | |
spi <- tab_cAnos_subArea[tab_cAnos_subArea$Esp == i, ] # spi<-spQuad[spQuad$Esp==espList[i],] | |
#! === 7 - Merge da dataframe com os dados da espécie na dataframe com a ordem da grelha | |
gridsubArea_ca <- as.data.frame(grelhas[[hh]]) #! Reconstroi o data.frame a partir da lista com as grelhas separadas | |
fillAb_ca <- merge(gridsubArea_ca, spi, by.x = "Quad", by.y = "Quad", all.x = T) | |
fillAb_ca$value[is.na(fillAb_ca$value)] <- 0 | |
fillAb_ca <- fillAb_ca[order(fillAb_ca$id, fillAb_ca$Id), ] | |
#! === 8 - Titulos do gráfico - não consigo alterar a formataçção da fonte no titulo | |
nomeComum_i <- paste(Tax_Ecol$Nomecomum[Tax_Ecol$Esp == i], " ", sep = "") | |
nomeCient_i <- Tax_Ecol$Nome[Tax_Ecol$Esp == i] | |
#! === 9 - Construção do gráfico para a espécie i | |
graph <- ggplot(fillAb_ca, aes(x = X1,y = X2)) + | |
geom_polygon(aes(group = Id, fill = as.factor(value)), colour = "grey80") + | |
coord_equal() + | |
scale_fill_manual(paste("Estação: ", jj, "\nComparação anual\nda presença na área", sep = ""), values = paleta_compara_Anos, labels = c("Não detectada", "Apenas em 2007", "Apenas em 2008", "Em 2007 e 2008")) + | |
scale_y_continuous("Coordenada Y") + | |
scale_x_continuous("Coordenada X") + | |
#! Opçoes de formataçao | |
opts(#!legend.position = "none", - Para eliminar a legenda, se necessario | |
title = paste(nomeComum_i, nomeCient_i), #! Titulo do grafico | |
plot.title = theme_text(size = 12,face = "italic"), #! Formataçao do titulo do grafico | |
axis.text.x = theme_text(hjust = 0.5,vjust = 1.2, size = 10,col = "grey50"), #! altera a formataçao do png (?) | |
axis.text.y = theme_text(hjust = 0.5, vjust = 0, size = 10,col = "grey50", angle = 90), | |
axis.title.x = theme_text(size = 10), | |
axis.title.y = theme_text(size = 10, angle = 90), | |
legend.title = theme_text(hjust = 0,size = 10, face = "bold"), | |
legend.text = theme_text(hjust = -0.2, size = 10)) + | |
#! Adicionar pontos que podem representar localidades, outras referencias | |
geom_point(aes(x = X1,y = X2), colour = "black",data = data.frame(X1 = Loc$X1[Loc$Area == substr(hh, 1, 2)], X2 = Loc$X2[Loc$Area == substr(hh, 1, 2)]), size = 2.5) + | |
geom_text(aes(x = X1,y = X2,label = Loc$Local[Loc$Area == substr(hh, 1, 2)]), colour = "black",data = data.frame(X1 = Loc$X1[Loc$Area == substr(hh, 1, 2)] + 900, X2 = Loc$X2[Loc$Area == substr(hh, 1, 2)] - 400), size = 4) | |
#! Exportar o grafico como imagem - neste caso um png com 500x430px (arbitrario e ajustado manualmente) | |
png(bg = "transparent", width = 540, height = 440, file = paste("D:/... ".png", sep = "")) #! Ordena tanto por ordem taxominoma como pela epoca-ordem taxonomica. | |
print(graph) #! Um objecto tipo trellis necessita de ser recuperado com print() | |
dev.off() #! Encerra o png | |
graphics.off() #! Encerra qualquer graphical device que possa estar aberto | |
}#!2 | |
}#!1 | |
graphics.off() | |
#! ===================================== Exportar Workspace ============================================= | |
save.image('D:... |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment