[R] Ggplot2: Moving legend, change fill and removal of space between plots when using grid.arrange() possible use of facet_grid?
John Kane
jrkrideau at inbox.com
Wed Mar 6 19:51:31 CET 2013
For the simplist of the issues use scale_shape(solid = FALSE) to get hollow points
Using your data (below) this seems to work
p1 <- ggplot(SummAB, aes(factor3, mean,
colour = factor1, group = factor1,shape = factor1)) +
scale_y_continuous(guide_legend(legend.position=c(4 ,6))) +
scale_shape(solid = FALSE) + guides(colour = guide_legend(title.position = "right")) +
geom_point(aes(shape=factor(factor1)), color="black", fill="white",
position = "dodge", width = 0.3, size=3) +
geom_line(aes(linetype=factor1), color = "black", size = 0.5) +
geom_errorbar(aes(ymin = mean - sdv , ymax = mean + sdv), width = 0.3,
position = "dodge", color = "black", size=0.3) +
theme_bw() +
ylab(expression(paste("my measured stuff"))) +
xlab("factor3") + ggtitle("") +
labs(color = "factor1", shape = "factor1", group = "factor1",
linetype = "factor1")
p1
John Kane
Kingston ON Canada
> -----Original Message-----
> From: anna at ecology.su.se
> Sent: Wed, 06 Mar 2013 13:32:42 +0100
> To: r-help at r-project.org
> Subject: [R] Ggplot2: Moving legend, change fill and removal of space
> between plots when using grid.arrange() possible use of facet_grid?
>
> Hi,
>
> # For publications, I am not allowed to repeat the axes. I have tried to
> remove the axes using:
> # yaxt="n", but it did not work. I have not understood how to do this in
> ggplot2. Can you help me?
> # I also do not want loads of space between the graphs (see below script
> with Dummy Data).
> # If I could make it look like the examples on the (nice) examples page:
> # http://www.ling.upenn.edu/~joseff/rstudy/summer2010_ggplot2_intro.html
> # using the facet_grid(), I would be very very happy.
>
> # I also do not want the gemoetric points to be filled and the
> fill="white"
> commande
> # does not seem to work - why? and are there alternatives?
>
> #Furthermore, I would like to add legends to inside the plot area instead
> of
> on the side. Like when you use plotrix() and brkdn.plot:
> legend("topright", c("A", "B"), pch=c(0,1), bg="white",
> lty = 1:2, cex=1, bty="n")
> # This did not work in ggplot2. What are my alternatives. I have
> extensively
> searched the internet and have I missed something obvious, it was due to
> # tiredness and not to lazyness.
>
> # Some dummy data:
> mydata<- data.frame(factor1 = factor(rep(LETTERS[1:6], each = 80)),
> factor2 = factor(rep(c(1:5), each = 16)),
> factor3 = factor(rep(c(1:4), each = 4)),
> var1 = rnorm(120, mean = rep(c(0, 3, 5), each = 40),
> sd = rep(c(1, 2, 3), each = 20)),
> var2 = rnorm(120, mean = rep(c(6, 7, 8), each = 40),
> sd = rep(c(1, 2, 3), each = 20)))
>
>
> # Splitting data into 3 data frames (based on factor1)
> # If I could do this using for example facet_wrap() or facet_grid(), I
> would
> be very
> # happy! I have tried but failed that method.
>
> DataAB <- mydata[(mydata$factor1) %in% c("A", "B"), ]
> DataCD <- mydata[(mydata$factor1) %in% c("C", "D"), ]
> DataEF <- mydata[(mydata$factor1) %in% c("E", "F"), ]
> DataAB
> library(plyr)
> library(ggplot2)
>
> #Plot: levels A and B:
> # Summary (means etc)
> SummAB <- ddply(DataAB, .(factor3,factor1), summarize,
> mean = mean(var1, na.rm = FALSE),
> sdv = sd(var1, na.rm = FALSE),
> se = 1.96*(sd(var1,
> na.rm=FALSE)/sqrt(length(var1))))
> SummAB
> p1 <- ggplot(SummAB, aes(factor3, mean,
> colour = factor1, group = factor1,
> shape = factor1)) +
> geom_point(aes(shape=factor(factor1)), color="black", fill="white",
> position = "dodge", width = 0.3, size=3) +
> geom_line(aes(linetype=factor1), color = "black", size = 0.5) +
> geom_errorbar(aes(ymin = mean - sdv , ymax = mean + sdv), width = 0.3,
> position = "dodge", color = "black", size=0.3) +
> theme_bw() +
> ylab(expression(paste("my measured stuff"))) +
> xlab("factor3") + ggtitle("") +
> labs(color = "factor1", shape = "factor1", group = "factor1",
> linetype = "factor1")
> p1
>
> #Plot: levels C and D:
> # Summary (means etc)
> SummCD <- ddply(DataCD, .(factor3,factor1), summarize,
> mean = mean(var1, na.rm = FALSE),
> sdv = sd(var1, na.rm = FALSE),
> se = 1.96*(sd(var1, na.rm=FALSE)/sqrt(length(var1))))
>
> p2 <- ggplot(SummCD, aes(factor3, mean,
> colour = factor1, group = factor1,
> shape = factor1)) +
> geom_point(aes(shape=factor(factor1)), color="black", fill="white",
> position = "dodge", width = 0.3, size=3) +
> geom_line(aes(linetype=factor1), color = "black", size = 0.5) +
> geom_errorbar(aes(ymin = mean - sdv , ymax = mean + sdv), width = 0.3,
> position = "dodge", color = "black", size=0.3) +
> theme_bw() +
> ylab(expression(paste("my measured stuff"))) +
> xlab("factor3") + ggtitle("") +
> labs(color = "factor1", shape = "factor1", group = "factor1",
> linetype = "factor1")
> p2
>
> #Plot: levels C and D:
> # Summary (means etc)
> SummEF <- ddply(DataEF, .(factor3,factor1), summarize,
> mean = mean(var1, na.rm = FALSE),
> sdv = sd(var1, na.rm = FALSE),
> se = 1.96*(sd(var1, na.rm=FALSE)/sqrt(length(var1))))
>
> p3 <- ggplot(SummEF, aes(factor3, mean,
> colour = factor1, group = factor1,
> shape = factor1)) +
> geom_point(aes(shape=factor(factor1)), color="black", fill="white",
> #Why
> is the fill commando not working?
> position = "dodge", width = 0.3, size=3) +
> geom_line(aes(linetype=factor1), color = "black", size = 0.5) +
> geom_errorbar(aes(ymin = mean - sdv , ymax = mean + sdv), width = 0.3,
> position = "dodge", color = "black", size=0.3) +
> theme_bw() +
> ylab(expression(paste("my measured stuff"))) +
> xlab("factor3") + ggtitle("") +
> labs(color = "factor1", shape = "factor1", group = "factor1",
> linetype = "factor1")
> p3
>
> ary(gridExtra)
> sidebysideplot <- grid.arrange(p1, p2, p3, ncol=2)
>
>
> Anna Zakrisson Braeunlich
> PhD student
>
> Department of Ecology Environment and Plant Sciences
> Stockholm University
> Svante Arrheniusv. 21A
> SE-106 91 Stockholm
> Sweden
>
> Lives in Berlin.
> For paper mail:
> Katzbachstr. 21
> D-10965, Berlin - Kreuzberg
> Germany/Deutschland
>
> E-mail: anna.zakrisson at su.se
> Tel work: +49-(0)3091541281
> Mobile: +49-(0)15777374888
> LinkedIn: http://se.linkedin.com/pub/anna-zakrisson-braeunlich/33/5a2/51b
>
> ><((((B:>`b?". . b?" `b?". .b?" `b?". . ><((((B:>`b?". . b?" `b?". .b?"
> `b?". .><((((B:>`b?". . b?" `b?". .b?" `b?". .><((((B:>
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
____________________________________________________________
Receive Notifications of Incoming Messages
Easily monitor multiple email accounts & access them with a click.
Visit http://www.inbox.com/notifier and check it out!
More information about the R-help
mailing list