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:
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.
While facet_grid shows the labels at the margins of the facet plot, facet_wrap creates a label for each plot panel.
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))
dummy2$X <- factor(dummy2$X) ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + geom_hline(data = dummy2, aes(yintercept = Z))
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With