plot shape file using lattice xyplot
On Wed, 16 Dec 2009, Zia Ahmed wrote:
Thanks Andrews. It works fine. Nothing wrong with sp plot. I need to plot boundary around of sampling locations. R-script I have written, I used xyplot and levelplot.
This look like a two-step question, assuming that you need a line
representation of possible polygon boundaries from the shapefile. If it is
a SpatialLines object, omit the first step (it will work on
SpatialPolygons* objects with appropriate slot names, but the intention
is to use lines, so make sure that they are):
library(sp)
library(maptools)
xx <- readShapeSpatial(system.file("shapes/sids.shp",
package="maptools")[1])
proj4string(xx) <- CRS("+proj=longlat +ellps=clrk66")
# assigning geographical coordinates for this data set
class(xx)
lxx <- as(xx, "SpatialLines")
class(lxx)
lns <- slot(lxx, "lines")
olns <- lapply(lns, slot, "Lines")
ocrds <- matrix(nrow=0, ncol=2)
for (i in seq(along=olns)) {
for (j in seq(along=olns[[i]])) {
crds <- rbind(slot(olns[[i]][[j]], "coords"), c(NA, NA))
ocrds <- rbind(ocrds, crds)
}
}
plot(ocrds, type="l")
# sanity check
pts <- coordinates(spsample(xx, n=400, type="random"))
library(lattice)
xyplot(y~x, as.data.frame(pts), pch=1, cex=.8, col="black",
xlab=list("Easting (m)",cex=.9), ylab=list("Northing (m)",cex=.9),
aspect = mapasp(xx), # setting aspect for geographical coordinates
panel = function(...) {
panel.xyplot(...)
panel.lines(ocrds)
}
)
In summary: make an S-style coordinates matrix (lines separated by NA
rows), then pass through panel.lines().
Hope this helps,
Roger
Thanks again Zia Felix Andrews wrote:
What's wrong with using spplot? It is based on xyplot anyway. If you want to use xyplot, you can use the panel function that sp defines: sp.polygon You can read in the shapefile with the RGDAL package: shp <- readOGR(...) 2009/12/17 Zia Ahmed <zua3 at cornell.edu>:
Hi,
I am trying to plot a shape file in R. I can do it easily using plot or
spplot function. But I want plot this map with lattice xyplot function.
Any one has any idea? I do not want use "maps" package.
Help will be appreciated...
Thanks
Zia
library(maptools)
library(lattice)
bound<-read.shape("Boundary.shp")
#OR
bound<-readShapePoly("Boundary.shp")
plot(bound)
spplot(bound)
# Or following way
bound<-Map2poly(bound)
xybd<-attr(bound,"maplim")
plot(xybd$x,xybd$y, type="n",asp=1, xlab="", ylab="")
for (i in 1:length(bound)) lines(bound[[i]]) # How do I apply this code in
following panel.function of xyplot?
windows(width=5, height=5)
xyplot(y~x, as.data.frame(tala),pch=1, cex=.8,col="black",
xlab=list("Easting (m)",cex=.9),ylab=list("Northing (m)",cex=.9),
aspect = "iso",
panel = function(...) {
panel.xyplot(...)
panel.abline(h = 0:4*5000 + 545000, v= 0:4*5000 + 2650000,
col = "light grey")
panel.points(coordinates(tala.nr),cex=.95,pch=20, col="black")
panel.text(2671000, 563000, cex=1, " (a)")
},
)
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo
_______________________________________________ R-sig-Geo mailing list R-sig-Geo at stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo
Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, 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