>>>>> Marc Girondot via R-help <r-help@r-project.org> >>>>> on Mon, 24 Jul 2017 09:35:06 +0200 writes:
> Thanks for the proposition. As you see bellow, par("usr") is the same > before and after the points() (the full code is bellow): > .... >> par("usr") > [1] -0.2500000 1.2500000 -0.1666667 1.1666667 >> # if you remove this points() function, axis will show nothing. >> >> points(1.5, 1.5, type="p") >> p2 <- par(no.readonly=TRUE) >> par("usr") > [1] -0.2500000 1.2500000 -0.1666667 1.1666667 > ... > I can reproduce it in Ubuntu and MacosX R Gui and Rstudio (R 3.4.1). > Marc > Here is the code: > library(fields) > par(mar=c(5,4.5,4,7)) > D <- matrix(c(10, 20, 25, 30, 12, 22, 32, 35, 13, 25, 38, 40), nrow=3) > p0 <- par(no.readonly=TRUE) > image.plot(D, col=rev(heat.colors(128)),bty="n", xlab="Lines", > ylab="Columns", cex.lab = 0.5, > zlim=c(min(D, na.rm=TRUE),max(D, na.rm=TRUE)), > las=1, axes=FALSE) > p1 <- par(no.readonly=TRUE) > par("usr") > par("xpd") > # if you remove this points() function, axis will show nothing. > points(1.5, 1.5, type="p") > p2 <- par(no.readonly=TRUE) > par("usr") > par("xpd") > ########## > axis(1, at=seq(from=0, to=1, length=nrow(D)), labels=0:2, cex.axis=0.5) > axis(2, at=seq(from=0, to=1, length=ncol(D)), labels=0:3, las=1, > cex.axis=0.5) > identical(p1, p2) Have you ever carefully read the detailed help page about image.plot()? I haven't, but a cursory reading already shows me that the author of the function did this partly on purpose: > Side Effects: > > After exiting, the plotting region may be changed to make it > possible to add more features to the plot. To be explicit, > ‘par()\$plt’ may be changed to reflect a smaller plotting region > that has accommodated room for the legend subplot. Unfortunately, there it does _not_ mention the following : From looking at its code, and then re-reading parts of the help page, I see that there is a 'graphics.reset' argument which you can set to TRUE in such a case: image.plot(D, col=rev(heat.colors(128)),bty="n", xlab="Lines", ylab="Columns", cex.lab = 0.5, zlim= range(D, na.rm=TRUE), graphics.reset = TRUE, # <<<<< the solution las=1, axes=FALSE) Also note that zlim = range(D ...) is infinitely more elegant than zlim = c(min((D, ...), max(D, ...))) Martin Maechler ETH Zurich (and R core) ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.