[R] pointsize in png graphics

Paul Murrell p.murrell at auckland.ac.nz
Thu Sep 30 22:51:25 CEST 2004


Hi


Jan.Kleinn at partnerre.com wrote:
> Dear all,
> 
> I'm trying to produce 2 png files, one consisting of an image plot and a
> color-table (also an image plot) and the other one consisting of 4 image
> plots and a color table. I'd like the color table to be exactly the same.
> The way I proceded is the following:
> 
> for one plot and the color-table
> png(file = png.file, width = 650, height = 800, pointsize = 16)
> layout(matrix(c(1, 2), ncol = 2, nrow = 1, byrow = T),
>        widths = c(6, 1), heights = 1)
> par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
> ...
> dev.off()
> 
> for 4 plots and the color-table
> png(file = png.file, width = 650, height = 800, pointsize = 16)
> layout(matrix(c(1, 2, 5, 3, 4, 5), ncol = 3, nrow = 2, byrow = T),
>        widths = c(3, 3, 1), heights = c(1, 1))
> par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
> ...
> dev.off()
> 
> The only difference is the layout of the plot. The outcome though is
> completely different. It seems that the definition of the size of one point
> is different in the two plots as the graphics with 4 plots and color table
> has smaller fonts and smaller margins. What do I have to do to be sure the
> size of the fonts is the same in two different png graphcis of exactly the
> same size when the pointsize is the same?
> 
> I'm working with Windows XP and tried both running the R script as a batch
> job and running it within Emacs with ESS.


I think the problem is that R is trying to think for you.  R 
automatically reduces text size when there are more than three plots (or 
more than three cells in a layout) on a page.  Below are two suggestions 
for making the two layouts the same:


# dummy image plot
dummyplot <- function(col) {
   plot.new()
   usr <- par("usr")
   rect(usr[1], usr[3], usr[2], usr[4], col=col)
}

# original problem
x11()
layout(matrix(c(1, 2), ncol = 2, nrow = 1, byrow = T),
        widths = c(6, 1), heights = 1)
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
dummyplot("orange")
dummyplot("blue")

x11()
layout(matrix(c(1, 2, 5, 3, 4, 5), ncol = 3, nrow = 2, byrow = T),
        widths = c(3, 3, 1), heights = c(1, 1))
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
dummyplot("red")
dummyplot("yellow")
dummyplot("pink")
dummyplot("violet")
dummyplot("blue")

# solution 1: make second layout same as first
# leave first page alone
# revert auto cex decrease on second page
x11()
layout(matrix(c(1, 2), ncol = 2, nrow = 1, byrow = T),
        widths = c(6, 1), heights = 1)
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
dummyplot("orange")
dummyplot("blue")

x11()
layout(matrix(c(1, 2, 5, 3, 4, 5), ncol = 3, nrow = 2, byrow = T),
        widths = c(3, 3, 1), heights = c(1, 1))
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0,
     ### CHANGES HERE
     cex=1.5, mex=0.66)
dummyplot("red")
dummyplot("yellow")
dummyplot("pink")
dummyplot("violet")
dummyplot("blue")

# solution 2: make first layout same as second
# make same number of columns/rows in first layout
# leave second page alone
x11()
layout(### CHANGES HERE
        matrix(c(1, 1, 2, 1, 1, 2), ncol = 3, nrow = 2, byrow = T),
        widths = c(6, 1), heights = 1)
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
dummyplot("orange")
dummyplot("blue")

x11()
layout(matrix(c(1, 2, 5, 3, 4, 5), ncol = 3, nrow = 2, byrow = T),
        widths = c(3, 3, 1), heights = c(1, 1))
par(mar = c(0.2, 0.2, 0.2, 0.2), mgp = c(2, 1, 0), las = 0)
dummyplot("red")
dummyplot("yellow")
dummyplot("pink")
dummyplot("violet")
dummyplot("blue")

Paul
-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/




More information about the R-help mailing list