Re: [R] ggplot2: font size mismatch for pdf output

From: Prof Brian Ripley <>
Date: Tue, 13 May 2008 09:29:34 +0100 (BST)

If I do

> windows(width=6, height=5)

then the pdf plot is very good copy of what I see on screen. So the main issue seems to be that you changed the device size when you asked for the save. If you do that, you need to change 'pointsize' too -- but as you changed the aspect ratio, you cannot make that work exactly.

There is a bug in ggsave() for bitmap devices: it computes the width and height from 'dpi', but it fails to pass that information on to the devices, which assume 72dpi. So what it actually asked for was a 8 x 6.67 inch plot at 72dpi. 72dpi would be a better default, as not all of the many bitmap devices work correctly at other resolutions (and none did prior to R 2.7.0).

If you want an accurate png copy of what you see on screen, use savePlot() or the device menus. That copies the backing bitmap.

On Mon, 12 May 2008, Michael Friendly wrote:

> Sorry for not providing this in my initial posting.
> I'm using R version 2.7.0 (2008-04-22), on Win XP Pro.
> As I said, the .png output matched what I saw on screen.
> It was the .pdf output for which the font size was noticeably
> larger, enough to make the legend run off the screen.
> -Michael
> Prof Brian Ripley wrote:
>> What version of R and OS is this? Prior to R 2.7.0 there was little
>> attempt to match output dimensions from various devices, and one of the png
>> devices in 2.7.0 has an error in doing so, fixed in R-patched (see NEWS).
>> On Mon, 12 May 2008, Michael Friendly wrote:
>>> Hi
>>> In the following, the graph I see on the screen and the .png output
>>> coincide. However, in the .pdf file, the fonts seem to be scaled
>>> fairly larger, resulting in the label for the top legend disappearing.
>>> Is this an infelicity or bug, or is there something I've missed?
>>> More generally, how do I control the size of fonts used in legends
>>> and axis labels?
>>> library(car)
>>> library(ggplot2)
>>> qp <-qplot (education , income , shape=type , size=women , colour=prestige
>>> ,
>>> xlab="Education" , ylab="Income", data=Prestige)
>>> + scale_y_continuous(limits=c(NA, 20000))
>> Hmm, you can't break the line before '+'.
>>> qp + scale_size(to=c(1,8))
>>> ggsave(file="prestige-ggplot.png", width=6, height=5) # OK
>>> ggsave(file="prestige-ggplot.pdf", width=6, height=5) # fonts too large
>> I would not expect you to be able to specify a smaller size without also
>> reducing 'pointsize'. E.g. dev.print() does so, but ggsave seems not to.
>>> -Michael

Brian D. Ripley,        
Professor of Applied Statistics,
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________ mailing list
PLEASE do read the posting guide
and provide commented, minimal, self-contained, reproducible code.
Received on Tue 13 May 2008 - 08:49:18 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 13 May 2008 - 14:30:38 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive