Martin Batholdy
2015-Jul-20 15:27 UTC
[R] best way to globally set parameters for base graphics
Hi, I am looking for a way to modify the basic setup for any kind of plot. (everything that is set with the par function ? like margins, cex, las etc.) I want to do this once ? preferably across R sessions and not individually before every plot. My first attempt was to add a par() with all my own defaults to the .Rprofile file. This obviously does not work because par opens a new drawing device, applying its effect only to this device. My next attempt was to write my own version of all basic plot functions (like plot, barplot etc.) adding a par() call within these functions. This works but only if I draw a single plot. As soon as I want to use mfrow or layout to draw multiple plots side by side into one device this version also does not work, since each of these functions will open a new drawing device by themselves. So, my question is; Is there any way to globally define parameters given to par() so that they apply to all plots in (at least) an entire R-session? Thank You!
Duncan Murdoch
2015-Jul-20 15:48 UTC
[R] best way to globally set parameters for base graphics
On 20/07/2015 11:27 AM, Martin Batholdy via R-help wrote:> Hi, > > I am looking for a way to modify the basic setup for any kind of plot. > (everything that is set with the par function ? like margins, cex, las etc.) > > I want to do this once ? preferably across R sessions and not individually before every plot. > > > My first attempt was to add a par() with all my own defaults to the .Rprofile file. > This obviously does not work because par opens a new drawing device, applying its effect only to this device. > > My next attempt was to write my own version of all basic plot functions (like plot, barplot etc.) adding a par() call within these functions. > This works but only if I draw a single plot. As soon as I want to use mfrow or layout to draw multiple plots side by side into one device this version also does not work, since each of these functions will open a new drawing device by themselves. > > > So, my question is; > Is there any way to globally define parameters given to par() so that they apply to all plots in (at least) an entire R-session?I haven't played with it, but setting a "plot.new" hook (or "before.plot.new") might do it for you. See ?plot.new. It might be tricky, because some par() parameters (e.g. "mfrow") shouldn't be called before every plot. You'd have to look at par("mfrow") to decide whether to call it or not. Duncan Murdoch
Martin Batholdy
2015-Jul-20 16:11 UTC
[R] best way to globally set parameters for base graphics
Thanks for the reply. It works fine for a single plot-call. But as soon as I call layout() before plotting I again run into the problem that plots are not drawn into one graphic device but another one is opened for the second plot-call. see here; setHook("plot.new", function() par(bty='n', cex=0.8, las=1, ann=F, lwd=2, mar=c(5, 4, 2, 1), oma=c(0,0,0,0), pch=19, xpd=T, cex.axis=0.85, mgp=c(2.5, 0.72, 0), tcl=-0.4 ) ) layout(matrix(1:2, 1, 2, byrow=T)) plot(c(1,2,3)) plot(c(3,2,1)) On 20 Jul 2015, at 17:48 , Duncan Murdoch <murdoch.duncan at gmail.com> wrote:> On 20/07/2015 11:27 AM, Martin Batholdy via R-help wrote: >> Hi, >> >> I am looking for a way to modify the basic setup for any kind of plot. >> (everything that is set with the par function ? like margins, cex, las etc.) >> >> I want to do this once ? preferably across R sessions and not individually before every plot. >> >> >> My first attempt was to add a par() with all my own defaults to the .Rprofile file. >> This obviously does not work because par opens a new drawing device, applying its effect only to this device. >> >> My next attempt was to write my own version of all basic plot functions (like plot, barplot etc.) adding a par() call within these functions. >> This works but only if I draw a single plot. As soon as I want to use mfrow or layout to draw multiple plots side by side into one device this version also does not work, since each of these functions will open a new drawing device by themselves. >> >> >> So, my question is; >> Is there any way to globally define parameters given to par() so that they apply to all plots in (at least) an entire R-session? > > I haven't played with it, but setting a "plot.new" hook (or > "before.plot.new") might do it for you. See ?plot.new. > > It might be tricky, because some par() parameters (e.g. "mfrow") > shouldn't be called before every plot. You'd have to look at > par("mfrow") to decide whether to call it or not. > > Duncan Murdoch