Peter Lomas
2015-Mar-25 18:21 UTC
[R] Resizing a graph with a legend in the outer margin - wish for functionality like mtext()
Dear R-Helpers
I am attempting to get a legend in the outer margins of a graph that has a
similar flexibility to mtext(), within base graphics. This is used in a
tool that will end up with graphs of many different coordinates, exported
in many different sizes. I'm trying to come up with a general solution.
I've used "bottom right" before but I found it interferes with the
graphs
frequently.
Here was my best attempt at something general, but then I encountered the
graph re-sizing issue:
x <- 1:100
y <- x +rnorm(100, 0,10)
plot(x,y, xlab="", main="Shrink and Enlarge This Graph")
abline(0,1 ,lty=2)
legend(x=grconvertX(1, from = "ndc", to = "user"),
y=grconvertY(0, from = "ndc", to = "user"),
lty=2,
legend="The legend doesn't rescale nicely",
xjust=1, yjust=0,
bty="n",
xpd=TRUE)
mtext("This example has some text in the outer margin.\nIt rescales
nicely.",
side = 1, line=3.5, adj=0)
Thanks!
Peter
[[alternative HTML version deleted]]
Paul Murrell
2015-Mar-25 21:56 UTC
[R] Resizing a graph with a legend in the outer margin - wish for functionality like mtext()
Hi
You can use the recordGraphics() function for this (if you are careful).
For example ...
x <- 1:100
y <- x +rnorm(100, 0,10)
plot(x,y, xlab="", main="Shrink and Enlarge This Graph")
abline(0,1 ,lty=2)
recordGraphics(
{
legend(x=grconvertX(1, from = "ndc", to = "user"),
y=grconvertY(0, from = "ndc", to = "user"),
lty=2,
legend="The legend scales nicely!",
xjust=1, yjust=0,
bty="n",
xpd=TRUE)
},
list(), getNamespace("graphics"))
mtext("This example has some text in the outer margin.\nIt rescales
nicely.",
side = 1, line=3.5, adj=0)
The important result is that those grConvert*() calls are performed on
every redraw.
Paul
On 03/26/15 07:21, Peter Lomas wrote:> Dear R-Helpers
>
> I am attempting to get a legend in the outer margins of a graph that has a
> similar flexibility to mtext(), within base graphics. This is used in a
> tool that will end up with graphs of many different coordinates, exported
> in many different sizes. I'm trying to come up with a general
solution.
> I've used "bottom right" before but I found it interferes
with the graphs
> frequently.
>
> Here was my best attempt at something general, but then I encountered the
> graph re-sizing issue:
>
> x <- 1:100
> y <- x +rnorm(100, 0,10)
> plot(x,y, xlab="", main="Shrink and Enlarge This
Graph")
> abline(0,1 ,lty=2)
>
> legend(x=grconvertX(1, from = "ndc", to = "user"),
> y=grconvertY(0, from = "ndc", to = "user"),
> lty=2,
> legend="The legend doesn't rescale nicely",
> xjust=1, yjust=0,
> bty="n",
> xpd=TRUE)
>
> mtext("This example has some text in the outer margin.\nIt rescales
> nicely.",
> side = 1, line=3.5, adj=0)
>
>
> Thanks!
> Peter
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>
--
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/