Re: [R] Problem with figure size when embedding fonts

2009-03-15 Thread Paul Johnson
On Sat, Mar 14, 2009 at 1:51 PM, Frank E Harrell Jr
f.harr...@vanderbilt.edu wrote:
 Dear Colleagues:

 I need to make a graphic that uses the Nimbus rather than Helvetica font
 family so that the font can be embedded in the encapsulated postscript file.
  This is to satisfy a requirement from a journal for electronic submission
 of figures.  I do the following:

 postscript('lowess.eps', onefile=FALSE, pointsize=18, horizontal=FALSE,
           family='NimbusSan')
 spar(mfrow=c(3,2))
 . . .
 dev.off()

 At this point lowess.eps looks fine.  When I run:
 embedFonts('lowess.eps') or
 embedFonts('lowess.eps', options='-sPAPERSIZE=letter')

 the figures are wider and the right panel of the 3x2 matrix of plots expands
 past the paper edge.  Advice welcomed.


Hello Frank:

This is an interesting post. I've not played with this until you
brought it to my attention.

I made a little progress.  It appears to me either that there is
something wrong with embedFonts as applied to postscript files or you
and I need to learn a lot of ghostscript options.

I created a small test and I see the same problem you do--the margins
bump if you embed the fonts. I think the problem may be worse than
that, it looks like the embedFonts wrecks the bounding box of the eps
file.

Do this:

 x - rnorm(100)
 y - rnorm(100)
 ml - loess(y~x)
 plot(x,y)
 lines(ml)
 postscript('lowess.eps', onefile=FALSE, pointsize=18,
horizontal=FALSE, family=NimbusSan)
 plot(x,y)
 lines(ml)
 text (-1,1,Really big writing)
 dev.off()

Copy lowess.eps to a safe place, then run

embedFonts(lowess.eps)

when you compare the two eps files, the margins are quite different.

I see the difference more sharply when I add the features I usually
have in postscript:


postscript('lowess.eps', onefile=FALSE, pointsize=18,
horizontal=FALSE, family=NimbusSan,
height=6,width=6,paper=special)
 plot(x,y)
 lines(ml)
 text(-1,1, Really  big writing
 dev.off()

If you run that, save a copy of lowess.eps, then run embedFonts, you
see the new lowess.eps no longer has the proper bounding box.

Here's the top of lowess-orig.eps

%!PS-Adobe-3.0 EPSF-3.0
%%DocumentNeededResources: font NimbusSanL-Regu
%%+ font NimbusSanL-Bold
%%+ font NimbusSanL-ReguItal
%%+ font NimbusSanL-BoldItal
%%+ font StandardSymL
%%Title: R Graphics Output
%%Creator: R Software
%%Pages: (atend)
%%BoundingBox: 0 0 432 432
%%EndComments
%%BeginProlog

On the other hand, the one that results from the embedFonts is not EPS
anymore, and the bounding box is, well, confusing.


%!PS-Adobe-3.0
%%Pages: (atend)
%%BoundingBox: 0 0 0 0
%%HiResBoundingBox: 0.00 0.00 0.00 0.00
%.
%%Creator: GPL Ghostscript 863 (pswrite)
%%CreationDate: 2009/03/15 20:00:36
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog

It appears to me that running the eps output file through ps2epsi will
re-create a tight bounding box, perhaps it is sufficient for your
need.

Rather than wrestle with the postscript  ghostscript, I re-did this
on a pdf output device. It appears to me that the margin placement is
not affected by embedFonts.


pdf('lowess.pdf', onefile=FALSE, pointsize=18,
family=NimbusSan,height=6,width=6,paper=special)
plot(x,y)
lines(ml)
text (-1,1,Really big writing)
dev.off()

I believe it is important to specify paper=special here.

I wondered about your experience with par(mfcol---).  Lately, I've had
more luck printing out the smaller separate components and putting
them on the same LaTeX figure. That way, I have a little more control,
and the fonts in the figure captions are identical to my text, which I
like.


PJ

-- 
Paul E. Johnson
Professor, Political Science
1541 Lilac Lane, Room 504
University of Kansas

__
R-help@r-project.org mailing list
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.


Re: [R] Problem with figure size when embedding fonts

2009-03-15 Thread Frank E Harrell Jr

Paul Johnson wrote:

On Sat, Mar 14, 2009 at 1:51 PM, Frank E Harrell Jr
f.harr...@vanderbilt.edu wrote:

Dear Colleagues:

I need to make a graphic that uses the Nimbus rather than Helvetica font
family so that the font can be embedded in the encapsulated postscript file.
 This is to satisfy a requirement from a journal for electronic submission
of figures.  I do the following:

postscript('lowess.eps', onefile=FALSE, pointsize=18, horizontal=FALSE,
  family='NimbusSan')
spar(mfrow=c(3,2))
. . .
dev.off()

At this point lowess.eps looks fine.  When I run:
embedFonts('lowess.eps') or
embedFonts('lowess.eps', options='-sPAPERSIZE=letter')

the figures are wider and the right panel of the 3x2 matrix of plots expands
past the paper edge.  Advice welcomed.



Hello Frank:

This is an interesting post. I've not played with this until you
brought it to my attention.

I made a little progress.  It appears to me either that there is
something wrong with embedFonts as applied to postscript files or you
and I need to learn a lot of ghostscript options.

I created a small test and I see the same problem you do--the margins
bump if you embed the fonts. I think the problem may be worse than
that, it looks like the embedFonts wrecks the bounding box of the eps
file.

Do this:

 x - rnorm(100)
 y - rnorm(100)
 ml - loess(y~x)
 plot(x,y)
 lines(ml)
 postscript('lowess.eps', onefile=FALSE, pointsize=18,
horizontal=FALSE, family=NimbusSan)
 plot(x,y)
 lines(ml)
 text (-1,1,Really big writing)
 dev.off()

Copy lowess.eps to a safe place, then run

embedFonts(lowess.eps)

when you compare the two eps files, the margins are quite different.

I see the difference more sharply when I add the features I usually
have in postscript:


postscript('lowess.eps', onefile=FALSE, pointsize=18,
horizontal=FALSE, family=NimbusSan,
height=6,width=6,paper=special)
 plot(x,y)
 lines(ml)
 text(-1,1, Really  big writing
 dev.off()

If you run that, save a copy of lowess.eps, then run embedFonts, you
see the new lowess.eps no longer has the proper bounding box.

Here's the top of lowess-orig.eps

%!PS-Adobe-3.0 EPSF-3.0
%%DocumentNeededResources: font NimbusSanL-Regu
%%+ font NimbusSanL-Bold
%%+ font NimbusSanL-ReguItal
%%+ font NimbusSanL-BoldItal
%%+ font StandardSymL
%%Title: R Graphics Output
%%Creator: R Software
%%Pages: (atend)
%%BoundingBox: 0 0 432 432
%%EndComments
%%BeginProlog

On the other hand, the one that results from the embedFonts is not EPS
anymore, and the bounding box is, well, confusing.


%!PS-Adobe-3.0
%%Pages: (atend)
%%BoundingBox: 0 0 0 0
%%HiResBoundingBox: 0.00 0.00 0.00 0.00
%.
%%Creator: GPL Ghostscript 863 (pswrite)
%%CreationDate: 2009/03/15 20:00:36
%%DocumentData: Clean7Bit
%%LanguageLevel: 2
%%EndComments
%%BeginProlog

It appears to me that running the eps output file through ps2epsi will
re-create a tight bounding box, perhaps it is sufficient for your
need.

Rather than wrestle with the postscript  ghostscript, I re-did this
on a pdf output device. It appears to me that the margin placement is
not affected by embedFonts.


pdf('lowess.pdf', onefile=FALSE, pointsize=18,
family=NimbusSan,height=6,width=6,paper=special)
plot(x,y)
lines(ml)
text (-1,1,Really big writing)
dev.off()

I believe it is important to specify paper=special here.

I wondered about your experience with par(mfcol---).  Lately, I've had
more luck printing out the smaller separate components and putting
them on the same LaTeX figure. That way, I have a little more control,
and the fonts in the figure captions are identical to my text, which I
like.


PJ



Paul,

Thank you very much.  Your pdf fix did the trick.

What is your favorite way of composing the multiple plots into a LaTeX 
figure?


ps2epsi resulted in a good bounding box but a huge graphics file.

Thanks,
Frank


--
Frank E Harrell Jr   Professor and Chair   School of Medicine
 Department of Biostatistics   Vanderbilt University

__
R-help@r-project.org mailing list
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.