Full_Name: Murray H Smith
Version: 1.7.1
OS: Windows2000
Submission from: (NULL) (202.36.29.1)
This alleged bug is Windows specific and occurs when using Windows metafile
plots.
The problem does not occur in a Linux version.
It does not occur in the pt rintout when a graphic is saved to a postscript file
under Windows.
The problem came to light when using plotmath to label a plot with latitudes
containing degree symbols.
If expression(40 * degree) is used it is written on the default line for
labels.
If expression(paste(40 * degree, " S") is used it displced closer to
the axis.
Pasting any character (except "") has this effect.
The following code illustrates the problem.
par(mfrow =c(3,2))
# plotmath not used
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = seq(41 , 40, -0.5))
# plotmath not used but characters pasted into labels
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = paste(seq(41, 40, -0.5), "S"))
# last label has no character component
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
minute), 40 * degree))
# last label has no plotmath component
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
minute), 40))
# last label has null character component
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
minute), paste(40 * degree, "")))
# last label has spaces character component
plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
xaxt = "n", yaxt = "n")
axis(1, at = seq(-41, -40, 0.5),
labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
minute), paste(" ", 40 * degree, " ")))
par(mfrow =c(1,1))
ligges@statistik.uni-dortmund.de
2003-Aug-07 08:42 UTC
[Rd] plotmath under windows (PR#3672)
mh.smith@niwa.co.nz wrote:> Full_Name: Murray H Smith > Version: 1.7.1 > OS: Windows2000 > Submission from: (NULL) (202.36.29.1) >I don't see any difference either difference using win.metafile() with its defaults on WinNT 4.0, R-1.7.1. Please start R with --vanilla and process your code again. Does it still happen? Uwe Ligges> This alleged bug is Windows specific and occurs when using Windows metafile > plots. > The problem does not occur in a Linux version. > It does not occur in the pt rintout when a graphic is saved to a postscript file > under Windows. > > The problem came to light when using plotmath to label a plot with latitudes > containing degree symbols. > > If expression(40 * degree) is used it is written on the default line for > labels. > > If expression(paste(40 * degree, " S") is used it displced closer to the axis. > Pasting any character (except "") has this effect. > > The following code illustrates the problem. > > par(mfrow =c(3,2)) > > # plotmath not used > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = seq(41 , 40, -0.5)) > > # plotmath not used but characters pasted into labels > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = paste(seq(41, 40, -0.5), "S")) > > # last label has no character component > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = expression(paste(41 * degree, " S"), paste(40 * degree, " ", 30 * > minute), 40 * degree)) > > # last label has no plotmath component > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = expression(paste(41 * degree, " S"), paste(40 * degree, " ", 30 * > minute), 40)) > > # last label has null character component > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = expression(paste(41 * degree, " S"), paste(40 * degree, " ", 30 * > minute), paste(40 * degree, ""))) > > # last label has spaces character component > plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab = "latitude", ylab = "", > xaxt = "n", yaxt = "n") > axis(1, at = seq(-41, -40, 0.5), > labels = expression(paste(41 * degree, " S"), paste(40 * degree, " ", 30 * > minute), paste(" ", 40 * degree, " "))) > > par(mfrow =c(1,1)) > > ______________________________________________ > R-devel@stat.math.ethz.ch mailing list > https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
If it occurs on plotmath it will also occur on screen (and it does for
me on WinXP).
Why do you think this is a bug? IT IS intentional. Please don't waste
our time reporting things you don't understand as bugs -- see the FAQ and
ask for help on R-help/R-devel first. In particular, your claim is false
(it is only including characters which have descenders that has the
effect, and more careful chacking might have made you realise this was a
feature).
If you plot different labels they will have different heights and depths
(and different heights/depths under different fonts), and that is taken
into account. It often is not clear where the baseline on a plotmath
expression is, and it is taken as the bottom of the bounding box, whereas
for character vectors the baselines are the baselines of the strings.
The Windows and postscript font metrics are not the same, and it may well
be the case (and Uwe Ligges' report suggests so) that Windows font metrics
differ by version of Windows, something I think we have met before.
The exact cause here is that many of your plotmath expressions contain a
space, and in WinXP, a space extends below as well as above the line. So
paste(40 * degree, " ",30 * minute) has space at the bottom of its
bounding box, and 40 does not. It is precisely the plotmath expressions
containing spaces which are raised.
If you would like to change the behaviour, please submit a patch (against
the current R-devel code) for us to test.
Here is a small example of alignment for you to ponder
plot(1:10, type="n")
text(1:2, 2, c("i", "j"), adj=c(0.5, 0))
text(3:4, 2, expression("i", "j"), adj=c(0.5, 0))
abline(h=2)
Try it under postscript() as well. So your patch will need to establish
the correct baseline for plotmath expressions. We look forward to your
positive contributions to R.
On Thu, 7 Aug 2003 mh.smith@niwa.co.nz wrote:
> Full_Name: Murray H Smith
> Version: 1.7.1
> OS: Windows2000
> Submission from: (NULL) (202.36.29.1)
>
>
> This alleged bug is Windows specific and occurs when using Windows metafile
> plots.
> The problem does not occur in a Linux version.
> It does not occur in the pt rintout when a graphic is saved to a postscript
file
> under Windows.
>
> The problem came to light when using plotmath to label a plot with
latitudes
> containing degree symbols.
>
> If expression(40 * degree) is used it is written on the default line for
> labels.
>
> If expression(paste(40 * degree, " S") is used it displced closer
to the axis.
> Pasting any character (except "") has this effect.
Not true. expression(paste(40 * degree, "S")) is not displaced here.
> The following code illustrates the problem.
>
> par(mfrow =c(3,2))
>
> # plotmath not used
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = seq(41 , 40, -0.5))
>
> # plotmath not used but characters pasted into labels
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = paste(seq(41, 40, -0.5), "S"))
>
> # last label has no character component
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
> minute), 40 * degree))
>
> # last label has no plotmath component
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
> minute), 40))
>
> # last label has null character component
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
> minute), paste(40 * degree, "")))
>
> # last label has spaces character component
> plot(seq(-41, -40, 0.5), c(0, 1, 0), type = "n", xlab =
"latitude", ylab = "",
> xaxt = "n", yaxt = "n")
> axis(1, at = seq(-41, -40, 0.5),
> labels = expression(paste(41 * degree, " S"), paste(40 * degree,
" ", 30 *
> minute), paste(" ", 40 * degree, " ")))
>
> par(mfrow =c(1,1))
>
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://www.stat.math.ethz.ch/mailman/listinfo/r-devel
>
--
Brian D. Ripley, ripley@stats.ox.ac.uk
Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/
University of Oxford, Tel: +44 1865 272861 (self)
1 South Parks Road, +44 1865 272866 (PA)
Oxford OX1 3TG, UK Fax: +44 1865 272595