SpatialPolygon with the max value gets no color assigned in spplot function when using "at" parameter
On Fri, 1 Feb 2013, Jan Hornych wrote:
Roger, this is a nice trick, however it works only for small numbers. A large double plus a tiny double is the same large double max(50)==max(50)+.Machine$double.eps [1] TRUE thinking about it now, my question should be. What is the smallest possible number that when added to double will make it a different number?
That depends on the size of the number?
identical(50, (50+(.Machine$double.eps^(1/1))))
[1] TRUE
identical(50, (50+(.Machine$double.eps^(1/2))))
[1] FALSE
identical(50, (50+(.Machine$double.eps^(2/3))))
[1] FALSE
identical(50000, (50000+(.Machine$double.eps^(2/3))))
[1] FALSE
x <- seq(-50, 50, length.out=100) idx <- 1/abs(diff(range(x))) min(x)==(min(x) - idx)
[1] FALSE
max(x)==(max(x) + idx)
[1] FALSE So some slackening of .Machine$double.eps may help? Should I add a helper function to classInt and an argument to classIntervals() to force [a,b]? Roger
Thank you Jan On Wed, Jan 30, 2013 at 8:04 PM, Roger Bivand <Roger.Bivand at nhh.no> wrote:
On Wed, 30 Jan 2013, Jan Hornych wrote: Hi,
I would like to do coloring of map regions based on the region values
"weight". The approach I am taking is first to break regions into equal
intervals,
classIntervals(spdf$weight,4)$**brks #4 intervals in this case
and than coloring all regions within the interval with the same color
col = brewer.pal(4,"RdYlGn"))
The max "weight" is as well the boundary of the interval The problem is
that the last region is not included into the last interval nad has thus
no
color. I do belive I am missing something, because any other solution to
manually manipulate the intervals, is overcomplicating the simplicity of
classIntervals function.
any idea how to get all rectangles colored?
Thank you
Jan
here is the example, see the rectangle in the right upper corner, it
remains white.
library(sp)
library(classInt)
library(RColorBrewer)
p1=cbind(c(0,0,1,1,0),c(0,1,1,**0,0));colnames(p1)=c("x","y")
p2=cbind(c(0,0,1,1,0),c(1,2,2,**1,1));colnames(p2)=c("x","y")
p3=cbind(c(1,1,2,2,1),c(0,1,1,**0,0));colnames(p3)=c("x","y")
p4=cbind(c(1,1,2,2,1),c(1,2,2,**1,1));colnames(p4)=c("x","y")
p5=cbind(c(2,2,3,3,2),c(0,1,1,**0,0));colnames(p5)=c("x","y")
p6=cbind(c(2,2,3,3,2),c(1,2,2,**1,1));colnames(p6)=c("x","y")
ps1=Polygons(list(Polygon(p1))**, ID="ps1")
ps2=Polygons(list(Polygon(p2))**, ID="ps2")
ps3=Polygons(list(Polygon(p3))**, ID="ps3")
ps4=Polygons(list(Polygon(p4))**, ID="ps4")
ps5=Polygons(list(Polygon(p5))**, ID="ps5")
ps6=Polygons(list(Polygon(p6))**, ID="ps6")
sps = SpatialPolygons(list(ps1,ps2,**ps3, ps4, ps5, ps6))
spdf=
SpatialPolygonsDataFrame(sps,**data.frame(weight=c(0.1,0.1,0.**
3,0.4,0.45,0.6),row.names=c("**ps1","ps2","ps3","ps4",
"ps5","ps6")))
sp.theme(set = TRUE, regions = list(col = brewer.pal(4,"RdYlGn")))
spplot(spdf, "weight", at=classIntervals(spdf$weight,**4)$brks)
I'm fairly sure I replied to this question very recently, but can't find the link. The at= argument in lattice graphics by default breaks [a, b), see: http://en.wikipedia.org/wiki/**Interval_(mathematics)#** Excluding_the_endpoints<http://en.wikipedia.org/wiki/Interval_(mathematics)#Excluding_the_endpoints> so the upper limit should be eased out beyond the maximum, here doing both for symmetry: ats <- classIntervals(spdf$weight,4)$**brks ats[1] <- ats[1] - .Machine$double.eps ats[length(ats)] <- ats[length(ats)] + .Machine$double.eps spplot(spdf, "weight", at=ats) This is described on the levelplot help page, linked from the spplot help page: at: A numeric vector giving breakpoints along the range of ?z?. ... However, this also means that when supplying ?at? explicitly, one has to be careful to include values outside the range of ?z? to ensure that all the data are shown. Hope this clarifies, Roger
[[alternative HTML version deleted]]
______________________________**_________________ R-sig-Geo mailing list R-sig-Geo at r-project.org https://stat.ethz.ch/mailman/**listinfo/r-sig-geo<https://stat.ethz.ch/mailman/listinfo/r-sig-geo>
-- Roger Bivand Department of Economics, NHH Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no
[[alternative HTML version deleted]]
Roger Bivand Department of Economics, NHH Norwegian School of Economics, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: Roger.Bivand at nhh.no