[R-br] Cores em mapas

Thiago V. dos Santos thi_veloso em yahoo.com.br
Sábado Fevereiro 20 19:33:53 BRST 2016


Acho que você procura a função filled.contour, ao invés de contour. Experimente:

filled.contour( sort(lon), lat, media_ColumnAmountO3[ order(lon), ])
map( xlim=c(-100,-10), ylim=c(-60,10), add=T)


Ou então eu deixo aqui algumas sugestões usando o levelplot (vai precisar baixar o shapefile da AS em anexo):

----------------------
library(raster)
library(rasterVis)

# Abre Arquivo
r <- brick("~/Downloads/teste.nc")

# Tira média dos dois mapas
r1 <- calc(r, fun=mean)

# Uma das vantagens de usar raster/rasterVis: depois de duas linhas de código, já estamos plotando os dados
levelplot(r1, margin=F, contour=T)

# Descompacta e abre contorno da América do Sul para adicionar ao plot 
#(precisa baixar arquivo em anexo ou do link http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip)

unzip("~/Downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip")
mapaSHP <- shapefile('TM_WORLD_BORDERS_SIMPL-0.3.shp')

# Plota com contorno da America do Sul
levelplot(r1, margin=F, contour=T, main="Campo médio de Ozônio Novembros") + layer(sp.lines(mapaSHP, lwd=0.7, col='black'))

# Quer mudar a cor? Basta mudar as configurações de 'par.settings'
levelplot(r1, margin=F, contour=T, main="Campo médio de Ozônio Novembros", par.settings=RdBuTheme) + layer(sp.lines(mapaSHP, lwd=0.7, col='black'))

# Também é possível criar a sua própria paleta de cores, usando o pacote Rcolorbrewer
# Veja aconselhamento para cores de mapa aqui: http://colorbrewer2.org/
# Vou criar uma escala sequencial, com 5 tons de azul
# Você pode ver todas as paletas disponíveis no pacote digitando display.brewer.all()
my.Theme=rasterTheme(region=brewer.pal('Blues', n=5))

# Aqui eu personalizo a escala usando os valores do raster e um numero maior de quebras
intervalos <- seq(trunc(min(values(r1))), trunc(max(values(r1))), length.out=length(my.Theme$regions$col)-1)

# Plota
p <- levelplot(r1, margin=F, contour=T, par.settings=my.Theme, at=intervalos, main="Campo médio de Ozônio Novembros") 
p + layer(sp.lines(mapaSHP, lwd=0.7, col='black'))

# Para salvar, eu recomendo copiar a imagem direto do display para um arquivo pdf
dev.copy2pdf(file="~/Desktop/ozone.pdf", width = 11, height = 8.5)

# Depois fica fácil convertê-la para png em altíssima resolução (600dpi) usando o ImageMagick (que precisa estar instalado):
# Assim a sua imagem está de acordo com as normas de publicação das principais revistas científicas
system("convert -density 600 ~/Desktop/ozone.pdf ~/Desktop/ozone.png")


Veja o resultado final: 
https://dl.dropboxusercontent.com/u/27700634/ozone.png
 
Greetings,
 -- Thiago V. dos Santos

PhD student
Land and Atmospheric Science
University of Minnesota


On Friday, February 19, 2016 1:18 PM, Mateus Dias Nunes <nunes.mateusdias em gmail.com> wrote:



Olá eu gostaria de colocar cores (com a barra de cores ao lado da figura) no meu mapa ao invés de usar os contornos com a função "contour";
abaixo o link da figura que consegui gerar através dessa função.

https://www.dropbox.com/s/xi622mbpqg7tgch/campo_medio_O3.png?dl=0

abaixo o script que gerou o grafico com os contornos.




# Carregando biblioteca para manipular arquivos netCDF

library(maps)
library(ncdf4) 
  
#==========================================================================


#BIBLIOTECA "ncdf4".
# PARA ESTE EXEMPLO SÃO USADOS RECURSOS PARA ABRIR A BIBLIOTECA )
#POIS RNetCDF, ncdf e ncdf4 APRESENTAM COMANDOS DIFERENTES PARA ABRIRMOS AS VARIÁVEIS


 dados <- nc_open('teste.nc')  
# lendo coordenadas espaço-temporal
lat <- ncvar_get( dados, 'lat' )
lon <- ncvar_get( dados, 'lon' )
time <- ncvar_get( dados, 'time' )

#=======================================================================================================

# lendo dados coluna total de Ozônio
ColumnAmountO3 <- ncvar_get( dados, 'ColumnAmountO3' )

# dimensoes da variavel ColumnAmountO3
dims_ColumnAmountO3 <- dim(ColumnAmountO3)

# tornando o arranjo 3D (ColumnAmountO3) em um 2D, organizado em ptos de grade X tempo

dim(ColumnAmountO3) <- c( dims_ColumnAmountO3[1]*dims_ColumnAmountO3[2], dims_ColumnAmountO3[3] )

# calculando a média e retornado-a em 2D

media_ColumnAmountO3 <- rowMeans( ColumnAmountO3)
dim(media_ColumnAmountO3) <- c( dims_ColumnAmountO3[1], dims_ColumnAmountO3[2] )

#==========================================================================================================
# longitude varia de 0 a 360, convertendo para -180 a 180, essa conversão é feita para plotagem sobre o mapa
for (i in 1:dim(lon)) { if (lon[i]>180) { lon[i] <- lon[i]-360 } }


# criando arquivo PNG que receberá o campo com o mapa

#png( filename="campo_medio_O3_jan2005.png",width=600,height=800 )

# plotando mapa da America do Sul
map( xlim=c(-100,-10), ylim=c(-60,10) )
map.axes()              # plotando eixos
title( main="Campo médio de ozonio janeiros" )   # título do gráfico

# definindo intervalo de 5 Dobson Units (DU)
intervalos = seq( trunc(min(ColumnAmountO3)), trunc(max(ColumnAmountO3)), 5 )

# adicionando campo de coluna de ozonio


contour( sort(lon), lat, media_ColumnAmountO3[ order(lon), ], add=T, levels=intervalos, lwd=2, labcex=1.3, col="black" )


# fechando arquivo PNG
#dev.off() 


obrigado
____________________________________________________________________________
MATEUS DIAS NUNES
MESTRANDO DO PROGRAMA DE PÓS-GRADUAÇÃO EM METEOROLOGIA - PPGMET
UNIVERSIDADE FEDERAL DE PELOTAS - UFPEL

TELEFONE: +55 (53) 81125154             
____________________________________________________________________________
_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forne� c�igo m�imo reproduz�el.


Mais detalhes sobre a lista de discussão R-br