[R-SIG-Mac] Fighting with lattice output to files
Simon Urbanek
simon.urbanek at r-project.org
Mon Mar 21 18:24:04 CET 2011
Ben,
On Mar 21, 2011, at 1:01 PM, Ben Haller wrote:
> Hi all. I'm trying to use lattice to make some plots with wireframe(). Ultimately I want to output these plots to PDF files, but I can't get that to work. I'm battling a number of issues. Note the problem is not the lack of a print() call, I'm aware of that issue. :-> I'm posting here because I imagine that the graphics device issues I am seeing are platform-specific.
>
> 1. Using device "jpeg" uses awful-looking results, apparently rendered with X11. This is a bit odd, as when I was last doing this sort of thing, I seem to recall very similar code (which I copied and pasted from where it was) producing nice-looking images that were not rendered with X11. Did the implementation of the jpeg device on Mac change?
>
jpeg() does what you tell it to - see the type argument to pick the appropriate back-end.
> 2. Using the device "quartz" (not to file, just trying to use it to go to screen) produces errors:
>
> Mon Mar 21 12:41:40 darwin.local R[25609] <Error>: kCGErrorRangeCheck: CGSNewWindowWithOpaqueShape: Cannot create window
> Mon Mar 21 12:41:40 darwin.local R[25609] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
>
> This happens quite reproducibly (just do "trellis.device(device="quartz", width=640, height=640)" in the R console, in fact).
Well, you're asking for a device size of 17.8 yards x 17.8 yards (width/height is in inches!) - I want to see the screen that can handle that ;). But, it should not crash, admittedly, so I'll add a check to avoid crash on such user errors.
> I don't know whether lattice is supposed to be compatible with the quartz device or not, but it certainly doesn't seem to be. And this error hoses R so thoroughly that you have to quit and restart it, as far as I can tell, which makes it a bit annoying; don't say I didn't warn you :->.
>
> 3. Using the device "pdf" produces pdf files that have the correct graphics, but have no text (axis labels, tick labels). This is true whether I try to explicitly specify the font (fontfamily="Times" or fontfamily="HersheySans") or do not specify any font.
>
I cannot reproduce that - taking the wireframe example from trellis the text appears perfectly normal (pdf() device and Preview to display it).
If in doubt, see ?pdf and ?pdfFonts for dealing with fonts and the pdf() device -- the fontfamily is not necessarily what matters here.
> 4. Using no device at all (i.e. no call to trellis.device, just printing my wireframe object) gives me lovely-looking output, but in a window, of course, not a file. This is a bit of a head-scratcher since trying to use device "quartz" produces errors; what device is lattice using, then, if not quartz?
It does use Quartz but with reasonable sizes ;). In the R.app GUI uou can use quartz.save() to save the output of that window WYSIWYG to almost any file format.
Cheers,
Simon
> Anyhow, trying to pass file settings (device and filename) to wireframe() in par.settings seems to get ignored, as far as I can tell, so I can't build on this success to generate the files I want.
>
> I've been googling and reading for an hour now, and can't seem to find any info on this, nor any sample code showing how to get trellis output to a pdf file (not any sample code that looks substantially different from the approach I'm taking, that is). So I'm rather at my wits end. Anybody? Can someone please post working sample code for trellis output to PDF that works on the current Mac build of R, at a minimum, and then maybe I can figure this out for myself?
>
> My full code is too hairy to post here, I think, but the nutshell is:
>
> plotFishyWireframe <- function(...)
> {
> ...stuff...
> wf_obj <- wireframe(t(zValues), xlab=xlab, ylab=ylab, zlab=zlab, scales=scales, zlim=zlim, main=list(label=plotTitle, cex=1.5), drape=TRUE, at=zcuts, col.regions=zcolors, colorkey=TRUE, screen=screen, perspective=perspective, par.settings=theme)
> print(wf_obj)
> }
>
> ...stuff...
>
> trellis.device(device="pdf", file="foo.pdf", width=640, height=640)
> plotFishyWireframe(...)
> dev.off()
>
> Thanks in advance!
>
> Ben Haller
> McGill University
>
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>
>
More information about the R-SIG-Mac
mailing list