Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add different lines for facets

Tags:

r

ggplot2

facet

I have data where I look at the difference in growth between a monoculture and a mixed culture for two different species. Additionally, I made a graph to make my data clear.

I want a barplot with error bars, the whole dataset is of course bigger, but for this graph this is the data.frame with the means for the barplot.

plant           species     means Mixed culture   Elytrigia   0.886625 Monoculture     Elytrigia   1.022667 Monoculture     Festuca     0.314375 Mixed culture   Festuca     0.078125 

With this data I made a graph in ggplot2, where plant is on the x-axis and means on the y-axis, and I used a facet to divide the species.

This is my code:

    limits <- aes(ymax = meansS$means + eS$se, ymin=meansS$means - eS$se)     dodge <- position_dodge(width=0.9)      myplot <- ggplot(data=meansS, aes(x=plant, y=means, fill=plant)) + facet_grid(. ~ species)      myplot <- myplot + geom_bar(position=dodge) + geom_errorbar(limits, position=dodge, width=0.25)     myplot <- myplot + scale_fill_manual(values=c("#6495ED","#FF7F50"))     myplot <- myplot + labs(x = "Plant treatment", y = "Shoot biomass (gr)")       myplot <- myplot + opts(title="Plant competition")     myplot <- myplot + opts(legend.position = "none")     myplot <- myplot + opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank()) 

So far it is fine. However, I want to add two different horizontal lines in the two facets. For that, I used this code:

    hline.data <- data.frame(z = c(0.511,0.157), species = c("Elytrigia","Festuca"))      myplot <- myplot + geom_hline(aes(yintercept = z), hline.data) 

However if I do that, I get a plot were there are two extra facets, where the two horizontal lines are plotted. Instead, I want the horizontal lines to be plotted in the facets with the bars, not to make two new facets. Anyone a idea how to solve this.

I think it makes it clearer if I put the graph I create now:

enter image description here

like image 962
Marinka Avatar asked Aug 07 '12 12:08

Marinka


People also ask

How do I add a horizontal line in ggplot2?

Example: To add the horizontal line on the plot, we simply add geom_hline() function to ggplot2() function and pass the yintercept, which basically has a location on the Y axis, where we actually want to create a vertical line. Here we set 20 to the xintercept.

What is the difference between Facet_wrap and Facet_grid?

While facet_grid shows the labels at the margins of the facet plot, facet_wrap creates a label for each plot panel.


1 Answers

Make sure that the variable species is identical in both datasets. If it a factor in one on them, then it must be a factor in the other too

library(ggplot2) dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10)) dummy1$D <- rnorm(nrow(dummy1)) dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0)) ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) +      geom_hline(data = dummy2, aes(yintercept = Z)) 

enter image description here

dummy2$X <- factor(dummy2$X) ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) +      geom_hline(data = dummy2, aes(yintercept = Z)) 

enter image description here

like image 159
Thierry Avatar answered Sep 20 '22 04:09

Thierry