[Rd] postscript failure manifests in plot.TukeyHSD
Ben Bolker
bbolker at gmail.com
Tue Dec 14 18:27:43 CET 2010
Jari Oksanen <jari.oksanen <at> oulu.fi> writes:
>
> Hello R Developers,
>
> Dear R-developers,
>
> I ran some standard tests with currently (today morning) compiled R release
> candidate in Linux R 2.12.1 RC (2010-12-13 r53843). Some of these tests used
> plot.TukeyHSD function. This worked OK on the screen (X11 device), but
> PostScript file could not be rendered. The following example had the problem
> with me:
>
> postscript(file="tukeyplot.ps")
> example(plot.TukeyHSD)
> dev.off()
>
> I couldn't view the resulting file with evince in Linux nor in the standard
> Preview in MacOS. When I compared the generated "tukeyplot.ps" to the same
> file generated with an older R in my Mac, I found one difference:
>
> $ diff -U2 oldtukeyplot.ps /Volumes/TIKKU/tukeyplot.ps
> --- oldtukeyplot.ps 2010-12-14 12:06:07.000000000 +0200
> +++ /Volumes/TIKKU/tukeyplot.ps 2010-12-14 12:13:32.000000000 +0200
> @@ -172,5 +172,5 @@
> 0 setgray
> 0.00 setlinewidth
> -[ 3.00 5.00] 0 setdash
> +[ 0.00 0.00] 0 setdash
> np
> 660.06 91.44 m
>
> Editing the changed line to its old value "[ 3.00 5.00] 0 setdash" also
> fixed the problem both in Linux and in Mac. Evidently something has changed,
> and probably somewhere else than in plot.TukeyHSD (which hasn't changed
> since r51093 in trunk and never in R-2-12-branch). I know nothing about
> PostScript so that I cannot say anything more (and I know viewers can fail
> with standard conforming PostScript but it is a bit disconcerting that two
> viewers fail when they worked earlier).
I must really be avoiding work today ...
I can diagnose this (I think) but don't know the best way to
solve it.
At this point, line widths on PDF devices were allowed to be <1.
==========
r52180 | murrell | 2010-06-02 23:20:33 -0400 (Wed, 02 Jun 2010) | 1 line
Changed paths:
M /trunk/NEWS
M /trunk/src/library/grDevices/src/devPS.c
allow lwd less than 1 on PDF device
==========
The behavior of PDF devices (by experiment) is to draw a 0-width
line as 1 pixel wide, at whatever resolution is currently being
rendered. On the other hand, 0-width lines appear to break PostScript.
(with the Linux viewer 'evince' I get warnings about "rangecheck -15"
when trying to view such a file).
plot.TukeyHSD contains the lines
abline(h = yvals, lty = 1, lwd = 0, col = "lightgray")
abline(v = 0, lty = 2, lwd = 0, ...)
which are presumably meant to render minimum-width lines.
I don't know whether it makes more sense to (1) change plot.TukeyHSD
to use positive widths (although that may not help: I tried setting
lwd=1e-5 and got the line widths rounded to 0 in the PostScript file);
(2) change the postscript driver to *not* allow line widths < 1 (i.e.,
distinguish between PS and PDF and revert to the pre-r52180 behaviour
for PS only).
On reflection #2 seems to make more sense, but digging through devPS.c
it's not immediately obvious to me where/how in SetLineStyle or
PostScriptSetLineTexture one can tell whether the current driver
is PS or PDF ...
More information about the R-devel
mailing list