Si desea hacer esto en R, puede echar un vistazo a la herramienta entrada del blog por Oscar Perpiñán Lamigueiro. No es exactamente lo que está buscando, pero podría haber una manera de modificarlo para que funcione para sus propósitos.
En mi último post describí cómo producir un multivariante Ahora mostraré cómo crear un mapa a partir de archivos raster raster. Uno de ellos es un factor que agrupará los valores del del otro. Así, una vez más, voy a superponer varios grupos en el mismo mapa.
Adición:
Puede que sea un poco tarde, pero pensé en añadir esto ya que parece una solución relativamente sencilla a tu problema.
En R, cuando se utiliza plot()
para visualizar rásters, existe un alpha
que establece la transparencia. Si trazara sus dos variables como diferentes rásters de color con escalas de color que van de claro a oscuro y cada una alpha
a un valor de 0,5, los colores se combinarán donde se solapen.
Lo he hecho con spatialPolygons
utilizando spplot
también. Imagino que funcionaría igual con los rasterizados. He aquí un ejemplo con spatialPolygons
:
library(sp)
library(rgeos)
library(rworldmap)
box <- readWKT("POLYGON((-180 90, 180 90, 180 -90, -180 -90, -180 90))")
proj4string(box) <- CRS("+proj=cea +datum=WGS84")
set.seed(1)
pts <- spsample(box, n=2000, type="random")
pols <- gBuffer(pts, byid=TRUE, width=50) # create circle polys around each point
merge = sample(1:40, 100, replace = T) # create vector of rand #s between 0-100 to merge pols on
Sp.df <- gUnionCascaded(pols, id = merge) # combine polygons with the same 'merge' value
# create SPDF using polygons and randomly assigning 1 or 2 to each in the @data df
Sp.df <- SpatialPolygonsDataFrame(Sp.df, data.frame(z = factor(sample(1:2, length(Sp.df), replace = TRUE)),
row.names= unique(merge)))
Sp.df <- crop(Sp.df, box)
colors <- c(rgb(r=0, g=0, blue=220, alpha=50, max=255), rgb(r=220, g=0, b=0, alpha=50, max=255))
land <- getMap()
overlay.map <- spplot(Sp.df, zcol = "z", col.regions = colors, col = NA, alpha = 0.5, breaks=c(0,1)) +
layer(sp.polygons(land, fill = "transparent", col = "grey50"))
Obviamente, la leyenda no es muy útil para este mapa. Para crear una leyenda, hay que trazar los gradientes en un cuadrado, uno de izquierda a derecha y el otro de abajo arriba.
Aquí hay algo de código para hacer esto en gráficos base: https://stackoverflow.com/a/11103414/3897439 .
También lo hice para dos colores utilizando ggplot
ya que necesitaba gráficos de cuadrícula. He aquí un ejemplo sencillo:
Variable_A <- 100 # max of variable
Variable_B <- 100
x <- melt(outer(1:Variable_A, 1:Variable_B)) # set up the data frame to plot from
p <- ggplot(x) + theme_classic() + scale_alpha(range=c(0,0.5), guide="none") +
geom_tile(aes(x=Var1, y=Var2, fill="Variable_A", col.regions="red", alpha=Var1)) +
geom_tile(aes(x=Var1, y=Var2, fill="Variable_B", col.regions="blue", alpha=Var2)) +
scale_x_continuous(limits = c(0, Variable_A), expand = c(0, 0)) +
scale_y_continuous(limits = c(0, Variable_B), expand = c(0, 0)) +
xlab("Variable_A") + ylab("Variable_B") +
guides(fill=FALSE)
p
No es perfecto, pero puede servir para tus propósitos.
Otra fuente que puede tener información interesante y relevante para su tarea es: http://andrewpwheeler.wordpress.com/2012/08/24/making-value-by-alpha-maps-with-arcmap/ .