Traçando contornos em uma grade irregular

Eu tenho passado por páginas e páginas de charts de contorno em R (incluindo muitas dicas sobre stackoverflow) sem sucesso. Aqui estão meus dados para contorno, incluindo a adição de um mapa de Ruanda (os dados consistem em 14 valores de longitude, latitude e chuva como x, yez):

Lon Lat Rain 28.92 -2.47 83.4 29.02 -2.68 144 29.25 -1.67 134.7 29.42 -2.07 174.9 29.55 -1.58 151.5 29.57 -2.48 224.1 29.6 -1.5 254.3 29.72 -2.18 173.9 30.03 -1.95 154.8 30.05 -1.6 152.2 30.13 -1.97 126.2 30.33 -1.3 98.5 30.45 -1.81 145.5 30.5 -2.15 151.3 

Aqui está o código que eu tentei de stackoverflow:

 datr <- read.table("Apr0130precip.txt",header=TRUE,sep=",") x <- datr$x y <- datr$y z <- datr$z require(akima) fld <- interp(x,y,z) par(mar=c(5,5,1,1)) filled.contour(fld) 

A interpolação falha.ajuda será apreciada.

   

Aqui estão algumas possibilidades diferentes usando charts de base R e ggplot . Tanto os contornos simples quanto os charts no topo dos mapas são gerados.


Interpolação

 library(akima) fld < - with(df, interp(x = Lon, y = Lat, z = Rain)) 

gráfico de base R usando filled.contour

 filled.contour(x = fld$x, y = fld$y, z = fld$z, color.palette = colorRampPalette(c("white", "blue")), xlab = "Longitude", ylab = "Latitude", main = "Rwandan rainfall", key.title = title(main = "Rain (mm)", cex.main = 1)) 

insira a descrição da imagem aqui


ggplot básica do ggplot usando geom_tile e stat_contour

 library(ggplot2) library(reshape2) # prepare data in long format df < - melt(fld$z, na.rm = TRUE) names(df) <- c("x", "y", "Rain") df$Lon <- fld$x[df$x] df$Lat <- fld$y[df$y] ggplot(data = df, aes(x = Lon, y = Lat, z = Rain)) + geom_tile(aes(fill = Rain)) + stat_contour() + ggtitle("Rwandan rainfall") + xlab("Longitude") + ylab("Latitude") + scale_fill_continuous(name = "Rain (mm)", low = "white", high = "blue") + theme(plot.title = element_text(size = 25, face = "bold"), legend.title = element_text(size = 15), axis.text = element_text(size = 15), axis.title.x = element_text(size = 20, vjust = -0.5), axis.title.y = element_text(size = 20, vjust = 0.2), legend.text = element_text(size = 10)) 

insira a descrição da imagem aqui


ggplot em um mapa do Google criado pelo ggmap

 # grab a map. get_map creates a raster object library(ggmap) rwanda1 < - get_map(location = c(lon = 29.75, lat = -2), zoom = 9, maptype = "toner", source = "stamen") # alternative map # rwanda2 <- get_map(location = c(lon = 29.75, lat = -2), # zoom = 9, # maptype = "terrain") # plot the raster map g1 <- ggmap(rwanda1) g1 # plot map and rain data # use coord_map with default mercator projection g1 + geom_tile(data = df, aes(x = Lon, y = Lat, z = Rain, fill = Rain), alpha = 0.8) + stat_contour(data = df, aes(x = Lon, y = Lat, z = Rain)) + ggtitle("Rwandan rainfall") + xlab("Longitude") + ylab("Latitude") + scale_fill_continuous(name = "Rain (mm)", low = "white", high = "blue") + theme(plot.title = element_text(size = 25, face = "bold"), legend.title = element_text(size = 15), axis.text = element_text(size = 15), axis.title.x = element_text(size = 20, vjust = -0.5), axis.title.y = element_text(size = 20, vjust = 0.2), legend.text = element_text(size = 10)) + coord_map() 

insira a descrição da imagem aqui


ggplot em um mapa criado a partir do shapefile

 # Since I don't have your map object, I do like this instead: # get map data from # http://biogeo.ucdavis.edu/data/diva/adm/RWA_adm.zip # unzip files to folder named "rwanda" # read shapefile with rgdal::readOGR # just try the first out of three shapefiles, which seemed to work. # 'dsn' (data source name) is the folder where the shapefile is located # 'layer' is the name of the shapefile without the .shp extension. library(rgdal) rwa < - readOGR(dsn = "rwanda", layer = "RWA_adm0") class(rwa) # [1] "SpatialPolygonsDataFrame" # convert SpatialPolygonsDataFrame object to data.frame rwa2 <- fortify(rwa) class(rwa2) # [1] "data.frame" # plot map and raindata ggplot() + geom_polygon(data = rwa2, aes(x = long, y = lat, group = group), colour = "black", size = 0.5, fill = "white") + geom_tile(data = df, aes(x = Lon, y = Lat, z = Rain, fill = Rain), alpha = 0.8) + stat_contour(data = df, aes(x = Lon, y = Lat, z = Rain)) + ggtitle("Rwandan rainfall") + xlab("Longitude") + ylab("Latitude") + scale_fill_continuous(name = "Rain (mm)", low = "white", high = "blue") + theme_bw() + theme(plot.title = element_text(size = 25, face = "bold"), legend.title = element_text(size = 15), axis.text = element_text(size = 15), axis.title.x = element_text(size = 20, vjust = -0.5), axis.title.y = element_text(size = 20, vjust = 0.2), legend.text = element_text(size = 10)) + coord_map() 

insira a descrição da imagem aqui


A interpolação e plotagem de seus dados de precipitação poderiam, é claro, ser feitos de uma maneira muito mais sofisticada, usando as boas ferramentas para dados espaciais em R. Considere a minha resposta um começo bastante rápido e fácil.