[R-sig-Geo] fixed colors in maps (Katona Lajos)

Edzer Pebesma edzer.pebesma at uni-muenster.de
Sat Jan 3 15:24:57 CET 2009


Dear all,

I've uploaded a new sp version to /incoming on CRAN (0.9-29) where 
spplot should deal better with factors as dependent variables. As 
levelplot does not really have this functionality, it involved a bit of 
work on the spplot side.

Now, spplot checks that all factors in layers (panels) have the same 
levels; I cannot see use of paneled plots for factors having different 
levels; this means that the example Jon Loehrke gave, to which I reacted 
with a note that the resulting plot was wrong on

https://stat.ethz.ch/pipermail/r-sig-geo/2008-December/004729.html

now breaks with an error condition. Please convince me if you think this 
is bad design.

Also, when plotting factors, the length of the col.regions color ramp 
now needs to equal the number of factor levels. An exception is when 
plotting points; in this case a single color is also accepted (because 
you may want to use point symbols to distinguish classes). The default 
color setting for factors is still that for continuous variables (the 
cm.colors() default of lattice); I'm quite unhappy about this but am 
also reluctant to make sp dependent on RColorBrewer.

Please test & comment; happy new year!
--
Edzer


Katona Lajos wrote:
>  Hi,
>  there is an example here:
>
>  library(sp)
>  library(lattice)
>  library(RColorBrewer)
>  data(meuse)
>  coordinates(meuse) <- ~x+y
> 
meuse$color_codes=as.numeric(meuse$ffreq)+as.numeric(meuse$soil)+as.numeric(meuse$lime)
>  meuse$color_codes[1:3]=1
>  meuse$color_codes[4:7]=2
>  meuse$color_codes[16:20]=8
>  meuse$color_codes[21:26]=9
>  meuse$color_codes2=meuse$color_codes
>  meuse$color_codes3=meuse$color_codes
>  meuse$color_codes2=ifelse(meuse$color_codes2<4,meuse$color_codes2,3)
>  meuse$color_codes3=ifelse(meuse$color_codes3>6,meuse$color_codes3,6)
>  meuse$color_codes=as.factor(meuse$color_codes)
>  meuse$color_codes2=factor(meuse$color_codes2, levels=c(1,2,3,4,5,6,7,8,9))
>  meuse$color_codes3=factor(meuse$color_codes3, levels=c(1,2,3,4,5,6,7,8,9))
>  #good
>  spplot(meuse, "color_codes", col.regions=brewer.pal(9, "Reds"))
>  #wrong (I'd like to see every code of colors in legend, and only the 
first 3
>  colors from the 9 in the map)
>  spplot(meuse, "color_codes2", col.regions=brewer.pal(9, "Reds"))
>  #wrong (I'd like to see every code of colors in legend, and only 
between 6 and
>  9 colors from the 9 in the map)
>  spplot(meuse, "color_codes3", col.regions=brewer.pal(9, "Reds"))
>
>  Best regards,
>  Lajos Katona
>
>
>  On Sun, 28 Dec 2008 12:36:35 +0100, Edzer Pebesma
>  <edzer.pebesma at uni-muenster.de> wrote:
> > Could you provide me and/or the list with an example that we can
> > reproduce and that illustrates your problem?
> > --
> > Edzer
>
>  _______________________________________________
>  R-sig-Geo mailing list
>  R-sig-Geo at stat.math.ethz.ch
>  https://stat.ethz.ch/mailman/listinfo/r-sig-geo

-- 
Edzer Pebesma
Institute for Geoinformatics (ifgi), University of Münster
Weseler Straße 253, 48151 Münster, Germany. Phone: +49 251
8333081, Fax: +49 251 8339763 http://ifgi.uni-muenster.de/
http://www.springer.com/978-0-387-78170-9 e.pebesma at wwu.de




More information about the R-sig-Geo mailing list