[R-es] Mapa de quantiles con spplot

Oscar Perpiñan oscar.perpinan en upm.es
Mar Mayo 6 13:31:10 CEST 2014


Hola,

El problema con la propuesta de Olivier es que los intervalos son
diferentes para cada variable.

La forma sencilla y rápida es:

spplot(zm["part88"], col.regions=plotclr, at=class$brks)

Pero para que quede más elegante hay que dar algunos pasos más:

## Intervalos en forma character
op <- options(digits=4)
tab <- print(class)
options(op)
intChar <- names(tab)
## Indice de correspondencia entre elemento e intervalo
idxP88 <- findCols(class)
## Es sólo un wrapper alrededor de findIntervals. Lo anterior para
otra variable es:
idxP93 <- findInterval(zm$part93, class$brks, all.inside = TRUE)

## Nueva variable categórica
zm$classP88 <- factor(intChar[idxP88])
zm$classP93 <- factor(intChar[idxP93])

## A pintar
spplot(zm[c("classP88", "classP93")], col.regions=plotclr)

Saludos.

Oscar.
-----------------------------------------------------------------
Oscar Perpiñán Lamigueiro
Dpto. Ingeniería Eléctrica (ETSIDI-UPM)
Grupo de Sistemas Fotovoltaicos (IES-UPM)
URL: http://oscarperpinan.github.io
Twitter: @oscarperpinan


El día 6 de mayo de 2014, 9:21, "Olivier Nuñez" <onunez en unex.es> escribió:
> El segundo argumento en spplot ha de definir el número/nombre del intervalo al que
> pertenece el area a pintar.
> Este código debería funcionar:
>
> zm$class88=findCols(classIntervals(zm$part88, nclr, style="quantile"))
> zm$class93=findCols(classIntervals(zm$part93, nclr, style="quantile"))
>
> spplot(zm, c("class88","class93"), col.regions=plotclr, cuts=(nclr-1),
> key.space="bottom")
>
> Un saludo. Olivier
>
>> Hola, no me funciona:
>>
>> Te contesto lo mismo que le contesté a otro compañero de la lista, espero ser más
>> claro.
>>
>> Les comparto la carpeta con la capa y los datos que estoy usando.
>>
>> https://www.dropbox.com/s/umy0evt3qm1wr4d/dissolve.zip
>>
>> Esto es lo que estoy haciendo:
>>
>> library(rgdal)
>> library(maptools)
>> library(sp)
>> library(classInt)
>> library(RColorBrewer)
>> zm <- readOGR(“.”, “zmdis”)
>> data <- read.csv(“part_pot.csv”, header=T, sep=“,”, dec=“.”)
>> zm en data=data.frame(data)
>> plotvar88 <- zm$part88
>> nclr <- 8
>> plotclr <- brewer.pal(nclr, “Blues”)
>> class <- classIntervals(plotvar88, nclr, style=“quantile”)
>> colcode <- findColours(class, plotclr)
>> plot(zm)
>> plot(zm, col=colcode, add=T)
>> legend(3777189,2249615, legend=names(attar(colcode, “table”)), fill=attr(colcode,
>> “palette”), cex=0.6, bty=“n”)
>>
>> Entonces obtengo el mapa como lo quiero (Me falta la división política, pero para
>> este ejemplo la omití):
>>
>> https://www.dropbox.com/s/w3ps61o4jr1ciy5/part88.tiff
>>
>> Cuando lo hago con spplot:
>>
>> spplot(zm, "part88", col.regions=plotclr, cuts=nclr, key.space="bottom”)
>>
>> Me regresa lo siguiente:
>>
>> https://www.dropbox.com/s/2cgiua5ra2tx4a0/part88_spplot.tiff
>>
>> Entonces lo que quiero es usar el spplot para pintar dos variables c(“part88”,
>> “part93”), que el mismo ‘legend’ aplique para ambas.
>>
>> Saludos cordiales
>> El 05/05/2014, a las 10:39, Olivier Nuñez <onunez en unex.es> escribió:
>>
>>> No resulta fácil contestarte con la información que proporcionas.
>>> Sobre la base de las variables que definiste, intuyó que lo siguiente debería
>>> funcionar:
>>>
>>> zm$clases <- class
>>> spplot(zm, "clases" , col.regions=plotclr)
>>>
>>> Un saludo. Olivier
>>>
>>>> Hola,
>>>>
>>>> Intento representar en un mapa participaciones porcentuales de los sectores
>>>> económicos y no logro hacerlo con spplot.
>>>>
>>>> He intentado con spplot(zm, c(“part88”, “part93”), cuts=4,
>>>> col.regions=brewer.pal(4,
>>>> “Set3”))
>>>>
>>>> Lo pude hacer utilizando el base graphics de R, definiendo:
>>>>
>>>>> plotvar88 <- zm$part88
>>>>> nclr <- 8
>>>>> plotclr <- brewer.pal(nclr, "PuOr")
>>>>> plotclr <- plotclr[nclr:1]
>>>>> class <- classIntervals(plotvar88, nclr, style="quantile")
>>>>> colcode <- findColours(class, plotclr)
>>>>> plot(zm)
>>>>> plot(zm, col=colcode, add=T)
>>>>> legend(3377189,2249615, legend=names(attr(colcode, "table")), fill=attr(colcode,
>>>>> "palette"), cex=0.6, bty="n”)
>>>>
>>>> Después intenté meter algunos de esos argumentos utilizando spplot
>>>>
>>>> spplot(zm, c(“part88”, “part93”), col.regions=plotclr, cuts=nclr)
>>>>
>>>> y tampoco funcionó.
>>>>
>>>> Tengo algunas nociones de cómo hacerlo en spplot, pero no sé cómo, pues
>>>> desconozco
>>>> la forma en utilizar los argumentos por ejemplo usando “cuts”, “at”. He revisado
>>>> la
>>>> ayuda que provee el paquete y sigo sin poder concretarlo.
>>>>
>>>> Agradecería un poco de orientación.
>>>>
>>>> Saludos cordiales.
>>>>
>>>> Rolando Valdez
>>>>
>>>> _______________________________________________
>>>> R-help-es mailing list
>>>> R-help-es en r-project.org
>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>>
>>>
>>>
>>> --
>>> ____________________________________
>>>
>>>
>>> Olivier G. Nuñez
>>> Email: onunez en unex.es
>>> http://kolmogorov.unex.es/~onunez
>>> Tel : +34 663 03 69 09
>>> Departamento de Matemáticas
>>> Universidad de Extremadura
>>>
>>>
>>> ____________________________________
>>>
>>>
>>>
>>
>> Rolando Valdez
>>
>>
>>
>>
>
>
> --
> ____________________________________
>
>
> Olivier G. Nuñez
> Email: onunez en unex.es
> http://kolmogorov.unex.es/~onunez
> Tel : +34 663 03 69 09
> Departamento de Matemáticas
> Universidad de Extremadura
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es