Patrick Lindsey
2002-Jun-21 16:54 UTC
The title function does not always work properly when used to add a global title to a figure containing several plots.
Hi everyone,
The following problem occurs with R-1.5.1 on an Intel laptop running
RedHat 7.2, with R-1.5.0 on an Alpha server running OSF 4.0 and on a
SGI server running IRIX 6.5, and with version of R as old as 1.2.3 (I
only tried older version under RedHat 7.2 and R-1.2.3 is the oldest I
still currently have installed). The complete of these three different
platforms can be found at the end of my email.
The problem is the following. I am trying to add a global title to a
figure which contains several plots. Although I am not convince the
method I am using (see below) is the best way to achieve this, I
noticed that it failed to add the title in certain cases but not in
others. I included below some examples where it works and where it
does not work for me. As the same behavior occurs on all three
platforms I have access to, I guess that everyone (perhaps not does on
MS-Windows or on a Mac) should be able to see the problem by running
my code (if this is not the case, please let me know and I shall
provide some postscript files illustrating the problem).
Unfortunately, the c-code to print text to the graphic window is
very complex and I am not familiar with it. As I thought that the
problem was related with the "title" function, I started by looking at
the "do_title" subroutine (R_HOME/src/main/plot.c). From there, I went
to the "GText" subroutine (R_HOME/src/main/graphics.c) which appears
to call the subroutine "clipText" to print the text to the canvas (but
I could already be wrong about this...). But in any case, I was not
able to trace down the problem as each of these subroutines appears to
get entered as expected with parameters containing the expected values
but then "clipText" appears to call ((GEDevDesc*)
dd)->dev->text(...)
which I longer understand... On the other hand, I no longer think that
the problem is actually coming from the "title" function but rather
from a global variable (or perhaps a "par" option) that is not always
reset (or initialized) properly... by at least functions such as
"title" and plot.default with options "axis",
"ylab", "xlab", or
"main" when the option "mfrow" is not set to
"c(1,1)" in the "par"
options.
I hope that this is understandable... but in any case, the following
examples should clarify things up.
# OK
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="",ylab="",main="")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# Not OK (global title not at all printed)
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis
label.",ylab="",main="")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# Not OK (global title not at all printed)
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="",ylab="This is the y-axis
label.",main="")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# Not OK (global title not at all printed)
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis label.",
ylab="This is the y-axis label.",main="")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# Not OK (global title not at all printed)
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis label.",
ylab="This is the y-axis label.",main="a)")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# OK
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis label.",
ylab="This is the y-axis label.",main="a)",axes=F)
axis(1)
axis(2)
box()
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
# Strange... but can perhaps help in identifying the problem.
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis label.",
ylab="This is the y-axis label.",main="a)")
par(mfrow=c(1,1),oma=c(0,0,0,0))
title(main="This should be the title of this figure.")
title(main="This should be the title of this figure.",outer=TRUE)
title(main="This should be the title of this figure.")
Please, let me know if I can be of any further help in tracing down
the problem.
Thanks,
Patrick
PS: Note that there is for the moment a work around which is the
following:
# Work-around
par(mfrow=c(2,2),oma=c(0,0,4,0))
plot(1:3,1:3,xlab="This is the x-axis label.",
ylab="This is the y-axis label.",main="a)")
par(mfrow=c(1,1),oma=c(0,0,0,0))
mtext("This should be the title of this
figure.",line=2,font=2,cex=1.2)
-----------------------------------------------------------------
> R.version
_
platform i686-pc-linux-gnu
arch i686
os linux-gnu
system i686, linux-gnu
status
major 1
minor 5.1
year 2002
month 06
day 17
language R
> R.version
_
platform alphaev6-dec-osf4.0f
arch alphaev6
os osf4.0f
system alphaev6, osf4.0f
status
major 1
minor 5.0
year 2002
month 04
day 29
language R
> R.version
_
platform mips-sgi-irix6.5
arch mips
os irix6.5
system mips, irix6.5
status
major 1
minor 5.0
year 2002
month 04
day 29
language R
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !) To:
r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._
ripley@stats.ox.ac.uk
2002-Jun-21 17:18 UTC
The title function does not always work properly when used to add a global title to a figure containing several plots.
Try par(mfrow=c(2,2),oma=c(0,0,4,0)) plot(1:3,1:3,xlab="",ylab="",main="") title(main="This should be the title of this figure.", outer=TRUE) which is how it is intended that this be done. All your examples work (as I expect from S) for me that way. Basically, after par(mfrow=c(1,1),oma=c(0,0,0,0)) you have no outer margin nor do you have a plot region set yet (and the next call which does would clear the screen). So your call to title() should probably fail as in> title(main="This should be the title of this figure.")Error in title(main = "This should be the title of this figure.") : plot.new has not been called yet It would be desirable if it either gave an error message or worked. On Fri, 21 Jun 2002, Patrick Lindsey wrote:> Hi everyone, > The following problem occurs with R-1.5.1 on an Intel laptop running > RedHat 7.2, with R-1.5.0 on an Alpha server running OSF 4.0 and on a > SGI server running IRIX 6.5, and with version of R as old as 1.2.3 (I > only tried older version under RedHat 7.2 and R-1.2.3 is the oldest I > still currently have installed). The complete of these three different > platforms can be found at the end of my email. > The problem is the following. I am trying to add a global title to a > figure which contains several plots. Although I am not convince the > method I am using (see below) is the best way to achieve this, I > noticed that it failed to add the title in certain cases but not in > others. I included below some examples where it works and where it > does not work for me. As the same behavior occurs on all three > platforms I have access to, I guess that everyone (perhaps not does on > MS-Windows or on a Mac) should be able to see the problem by running > my code (if this is not the case, please let me know and I shall > provide some postscript files illustrating the problem). > Unfortunately, the c-code to print text to the graphic window is > very complex and I am not familiar with it. As I thought that the > problem was related with the "title" function, I started by looking at > the "do_title" subroutine (R_HOME/src/main/plot.c). From there, I went > to the "GText" subroutine (R_HOME/src/main/graphics.c) which appears > to call the subroutine "clipText" to print the text to the canvas (but > I could already be wrong about this...). But in any case, I was not > able to trace down the problem as each of these subroutines appears to > get entered as expected with parameters containing the expected values > but then "clipText" appears to call ((GEDevDesc*) dd)->dev->text(...) > which I longer understand... On the other hand, I no longer think that > the problem is actually coming from the "title" function but rather > from a global variable (or perhaps a "par" option) that is not always > reset (or initialized) properly... by at least functions such as > "title" and plot.default with options "axis", "ylab", "xlab", or > "main" when the option "mfrow" is not set to "c(1,1)" in the "par" > options. > I hope that this is understandable... but in any case, the following > examples should clarify things up. > > # OK > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="",ylab="",main="") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # Not OK (global title not at all printed) > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.",ylab="",main="") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # Not OK (global title not at all printed) > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="",ylab="This is the y-axis label.",main="") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # Not OK (global title not at all printed) > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.", > ylab="This is the y-axis label.",main="") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # Not OK (global title not at all printed) > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.", > ylab="This is the y-axis label.",main="a)") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # OK > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.", > ylab="This is the y-axis label.",main="a)",axes=F) > axis(1) > axis(2) > box() > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > > # Strange... but can perhaps help in identifying the problem. > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.", > ylab="This is the y-axis label.",main="a)") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > title(main="This should be the title of this figure.") > title(main="This should be the title of this figure.",outer=TRUE) > title(main="This should be the title of this figure.") > > Please, let me know if I can be of any further help in tracing down > the problem. > > Thanks, > Patrick > > PS: Note that there is for the moment a work around which is the > following: > > # Work-around > par(mfrow=c(2,2),oma=c(0,0,4,0)) > plot(1:3,1:3,xlab="This is the x-axis label.", > ylab="This is the y-axis label.",main="a)") > par(mfrow=c(1,1),oma=c(0,0,0,0)) > mtext("This should be the title of this figure.",line=2,font=2,cex=1.2) > > ----------------------------------------------------------------- > > > R.version > _ > platform i686-pc-linux-gnu > arch i686 > os linux-gnu > system i686, linux-gnu > status > major 1 > minor 5.1 > year 2002 > month 06 > day 17 > language R > > > R.version > _ > platform alphaev6-dec-osf4.0f > arch alphaev6 > os osf4.0f > system alphaev6, osf4.0f > status > major 1 > minor 5.0 > year 2002 > month 04 > day 29 > language R > > > R.version > _ > platform mips-sgi-irix6.5 > arch mips > os irix6.5 > system mips, irix6.5 > status > major 1 > minor 5.0 > year 2002 > month 04 > day 29 > language R > > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- > r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html > Send "info", "help", or "[un]subscribe" > (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch > _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._ >-- 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 272860 (secr) Oxford OX1 3TG, UK Fax: +44 1865 272595 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-devel-request@stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._