Paul Johnson
2008-May-31 19:06 UTC
[R] How to add space between main title to leave space for legend?
Hello, everybody: I recently encountered an example with in which the graph was placed in a way that did not leave room for a legend. Maybe you would describe it as "legend too big", I'm not sure. I found myself wishing I could force in some space after the title. Here's working example where I'd like to make room for a legend. x <- rnorm(100) hist(x, freq=F, main="Different Meanings of Normality") lines(density(x)) xseq1 <- seq( min(x), max(x), length.out=100) m1 <- mean(x) sd1 <- sd(x) obsNormal <- dnorm(xseq1, mean=m1, sd=sd1) lines( xseq1, obsNormal, lty=2, col="red") truNormal <- dnorm(xseq1) lines(xseq1, truNormal, lty=3, col="green") legend(0,0.4, legend=c("observed density", "normal with observed mean & sd", "normal with 'true' mean and sd"), lty=c(1,2,3), col=c("black", "red", "green")) I tried fiddling around with par to change the margins, but it has the bad effect of resizing the image and creating a blank space into which I'm not allowed to write the legend. Know what I mean? I try par( mar=c(1,1,3,1)) or par(mai=c(1,1,4,1)) before the hist and it makes space, but useless space. I've been considering something desperate, such as layout(). Isn't there a simpler way? -- Paul E. Johnson Professor, Political Science 1541 Lilac Lane, Room 504 University of Kansas
Peter Dalgaard
2008-May-31 19:45 UTC
[R] How to add space between main title to leave space for legend?
Paul Johnson wrote:> Hello, everybody: > > I recently encountered an example with in which the graph was placed > in a way that did not leave room for a legend. Maybe you would > describe it as "legend too big", I'm not sure. I found myself wishing > I could force in some space after the title. > > Here's working example where I'd like to make room for a legend. > > > > x <- rnorm(100) > > hist(x, freq=F, main="Different Meanings of Normality") > > lines(density(x)) > > xseq1 <- seq( min(x), max(x), length.out=100) > > m1 <- mean(x) > > sd1 <- sd(x) > > obsNormal <- dnorm(xseq1, mean=m1, sd=sd1) > > lines( xseq1, obsNormal, lty=2, col="red") > > truNormal <- dnorm(xseq1) > > lines(xseq1, truNormal, lty=3, col="green") > > legend(0,0.4, legend=c("observed density", "normal with observed mean > & sd", "normal with 'true' mean and sd"), lty=c(1,2,3), col=c("black", > "red", "green")) > > > I tried fiddling around with par to change the margins, but it has the > bad effect of resizing the image and creating a blank space into which > I'm not allowed to write the legend. Know what I mean? I try > > par( mar=c(1,1,3,1)) or par(mai=c(1,1,4,1)) > > before the hist and it makes space, but useless space. > > I've been considering something desperate, such as layout(). Isn't > there a simpler way? > >(1) par(xpd=TRUE) allows you to write outside the plotting region (2) xlim and ylim can squeeze the plot in suitable directions Combined with what you are alread aware of, I think these should do the trick. -- O__ ---- Peter Dalgaard ?ster Farimagsgade 5, Entr.B c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 ~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk) FAX: (+45) 35327907
Gabor Grothendieck
2008-May-31 20:37 UTC
[R] How to add space between main title to leave space for legend?
Is this ok? set.seed(1) # ... your code ... legend("topright", title = "Legend", legend=c("observed density", "normal with \nobserved mean\n& sd", "normal with \n'true' mean & sd"), lty = 1:3, col = 1:3, box.lty = 0, text.width = 1.1, cex = 0.7) On Sat, May 31, 2008 at 3:06 PM, Paul Johnson <pauljohn32 at gmail.com> wrote:> Hello, everybody: > > I recently encountered an example with in which the graph was placed > in a way that did not leave room for a legend. Maybe you would > describe it as "legend too big", I'm not sure. I found myself wishing > I could force in some space after the title. > > Here's working example where I'd like to make room for a legend. > > > > x <- rnorm(100) > > hist(x, freq=F, main="Different Meanings of Normality") > > lines(density(x)) > > xseq1 <- seq( min(x), max(x), length.out=100) > > m1 <- mean(x) > > sd1 <- sd(x) > > obsNormal <- dnorm(xseq1, mean=m1, sd=sd1) > > lines( xseq1, obsNormal, lty=2, col="red") > > truNormal <- dnorm(xseq1) > > lines(xseq1, truNormal, lty=3, col="green") > > legend(0,0.4, legend=c("observed density", "normal with observed mean > & sd", "normal with 'true' mean and sd"), lty=c(1,2,3), col=c("black", > "red", "green")) > > > I tried fiddling around with par to change the margins, but it has the > bad effect of resizing the image and creating a blank space into which > I'm not allowed to write the legend. Know what I mean? I try > > par( mar=c(1,1,3,1)) or par(mai=c(1,1,4,1)) > > before the hist and it makes space, but useless space. > > I've been considering something desperate, such as layout(). Isn't > there a simpler way? > > > > > > > -- > Paul E. Johnson > Professor, Political Science > 1541 Lilac Lane, Room 504 > University of Kansas > > ______________________________________________ > R-help at r-project.org mailing list > 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. >