Hi, I tried to find an answer in the net but up to now without success.
A simple example made with: R version 2.10.0 (2009-10-26) x86_64-apple-darwin9.8.0 locale: [1] C/en_US.UTF-8/C/C/C/C attached base packages: [1] stats graphics grDevices utils datasets methods base My task is to draw a map as PDF of Portugal. My view port is given by the coordinates xlim <- c(-10, -6) and ylim <- c(36.9, 42.5). The width of the viewport has to be 5in (for a publication). Due to the ratio of xlim and ylim the height is 7in. OK. I tried: # ________________________________________ library(maptools) data(wrld_simpl) # my view port xlim <- c(-10, -6) ylim <- c(36.9, 42.5) pdf(file = "map_1.pdf", width = 5, height = 7, bg = "azure2") plot(wrld_simpl, xlim = xlim, ylim = ylim, col = "khaki") # my actual view port as reference rect(xlim[1], ylim[1], xlim[2], ylim[2], border = "red") dev.off() # ________________________________________ and ended up in Figure 1 (see attachment). My view port is shown as a red rectangle. As you can see the PDF contains more as I expected. After some empirical attempts I came up with a wrapper function "pdfNoBorder". Thus I tried it again with that function: # ________________________________________ library(maptools) data(wrld_simpl) pdfNoBorder <- function(file, width, height, xlim, ylim, asp = 1, ...) { if (missing(width) && missing(height)) { stop("At least width or height must be given") } if (missing(xlim) && missing(ylim)) { stop("xlim and ylim must be given") } if (missing(width)) { width = diff(xlim)/diff(ylim) * height } if (missing(height)) { height = width/(diff(xlim)/diff(ylim)) } pdf(file = file, width = width, height = height, ...) par(mai = rep(0, 4)) plot.new() par(fin = c(width * 1.08, height * 1.08), new = T) ### !!!!! plot.window(xlim = xlim, ylim = ylim, asp = asp) } # my view port xlim <- c(-10, -6) ylim <- c(36.9, 42.5) pdfNoBorder(file = "map_2.pdf", width = 5, xlim = xlim, ylim = ylim, bg = "azure2") plot(wrld_simpl, add = TRUE, col = "khaki") rect(xlim[1], ylim[1], xlim[2], ylim[2], border = "red") dev.off() # ________________________________________ and Figure 2 shows the result. So far so good, but if you look at the "pdfNoBorder" function I have to use "an empirical hack" namely the line: par(fin = c(width * 1.08, height * 1.08), new = T) The value 1.08 works "quite well" but I think that this value is a function of width, height, and the ratio width/height or similar and - of course - it's not precisely. My question is now whether somebody could give my an hint how to draw a PDF map which shows ONLY my desired view port and without any border by using a "clean" way without any estimated values. Many thanks in advance, --Hans Figure 1
map_1.pdf
Description: Adobe PDF document
Figure 2
map_2.pdf
Description: Adobe PDF document
_______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo