Adding a mean point to each boxplot year for each site

Hi, I am trying to assign a mean value point to each of the box plots on this figure. So an average for each lake in each year.

This is the reduced data set:

YearsPooled_txt <- tibble::tribble(
~Year, ~Lake, ~Total.Wt.(g), ~Total.Length.(mm), ~K, ~Parasites,
2015L, "A6", 0.0915, 29, 0.375169134, "Not Parasitized",
2015L, "A6", 0.1164, 30, 0.431111111, "Not Parasitized",
2015L, "A6", 0.166, 34, 0.42234887, "Not Parasitized",
2015L, "A6", 0.201, 36, 0.430812757, "Not Parasitized",
2015L, "A6", 0.1416, 33, 0.394022873, "Not Parasitized",
2015L, "A6", 0.1913, 35, 0.446180758, "Not Parasitized",
2015L, "A6", 0.1935, 34, 0.492316304, "Not Parasitized",
2015L, "A6", 0.1821, 35, 0.424723032, "Not Parasitized",
2015L, "A6", 2.8265, 71, 0.789721467, "Not Parasitized",
2015L, "A6", 0.0783, 25, 0.50112, "Not Parasitized",
2015L, "A6", 0.0837, 27, 0.425240055, "Not Parasitized",
2015L, "A6", 0.0819, 26, 0.465976331, "Not Parasitized",
2015L, "A6", 0.0946, 27, 0.480617792, "Not Parasitized",
2015L, "A6", 0.0811, 25, 0.51904, "Not Parasitized",
2015L, "A6", 0.0931, 27, 0.472997002, "Not Parasitized",
2015L, "A6", 0.0843, 26, 0.479631315, "Not Parasitized",
2015L, "A6", 0.0448, 23, 0.36820909, "Not Parasitized",
2015L, "A6", 0.0552, 24, 0.399305556, "Not Parasitized",
2015L, "A6", 0.1153, 28, 0.52523688, "Not Parasitized",
2015L, "A6", 0.1468, 30, 0.543703704, "Not Parasitized",
2015L, "A6", 0.1272, 31, 0.42697459, "Not Parasitized",
2015L, "A6", 0.0875, 22, 0.821750563, "Not Parasitized",
2015L, "A6", 0.096, 28, 0.437317784, "Not Parasitized",
2015L, "A6", 0.0736, 27, 0.373926739, "Not Parasitized",
2015L, "A6", 0.0512, 24, 0.37037037, "Not Parasitized",
2015L, "A6", 0.054, 25, 0.3456, "Not Parasitized",
2015L, "A6", 0.0466, 24, 0.337094907, "Not Parasitized",
2015L, "A6", 0.0706, 24, 0.510706019, "Not Parasitized",
2015L, "A6", 0.1055, 28, 0.480594023, "Not Parasitized",
2015L, "A6", 0.0222, 19, 0.323662341, "Not Parasitized",
2015L, "A6", 0.1069, 30, 0.395925926, "Not Parasitized",
2015L, "A6", 0.069, 25, 0.4416, "Not Parasitized",
2015L, "A8", 0.365, 41, 0.529591852, "Not Parasitized",
2015L, "A8", 0.534, 48, 0.482855903, "Not Parasitized",
2015L, "D7", 0.182, 35, 0.424489796, "Not Parasitized",
2015L, "D7", 0.1951, 34, 0.496387136, "Not Parasitized",
2015L, "D7", 0.2139, 34, 0.544219418, "Not Parasitized",
2015L, "D7", 0.2137, 34, 0.543710564, "Not Parasitized",
2015L, "D7", 0.2729, 39, 0.460054957, "Not Parasitized",
2015L, "D7", 0.3845, 44, 0.451375845, "Not Parasitized",
2015L, "D7", 0.3211, 41, 0.465895736, "Not Parasitized",
2015L, "D7", 0.3531, 48, 0.319281684, "Not Parasitized",
2015L, "D7", 0.621, 48, 0.561523438, "Not Parasitized",
2015L, "D7", 0.4377, 43, 0.550517564, "Not Parasitized",
2015L, "D7", 0.695, 51, 0.523931218, "Not Parasitized",
2015L, "D7", 1.122, 62, 0.470779766, "Not Parasitized",
2015L, "D7", 0.7418, 52, 0.527565999, "Not Parasitized",
2015L, "D7", 0.9674, 55, 0.581457551, "Not Parasitized",
2015L, "D7", 0.4216, 43, 0.530267775, "Not Parasitized",
2015L, "D7", 0.6057, 44, 0.711049023, "Not Parasitized",
2015L, "D7", 0.7109, 46, 0.730356703, "Not Parasitized",
2015L, "D7", 0.8889, 63, 0.355493167, "Not Parasitized",
2016L, "A6", 0.0534, 24, 0.386284722, "Not Parasitized",
2016L, "A6", 0.7558, 48, 0.683412905, "Not Parasitized",
2016L, "A6", 0.6106, 48, 0.552119502, "Not Parasitized",
2016L, "A8", 0.1219, 29, 0.499815491, "Not Parasitized",
2016L, "A8", 0.1249, 31, 0.419254137, "Not Parasitized",
2016L, "A8", 0.2519, 37, 0.497305194, "Not Parasitized",
2016L, "A8", 0.4617, 45, 0.506666667, "Not Parasitized",
2016L, "A8", 0.415, 42, 0.560144693, "Not Parasitized",
2016L, "A8", 0.9104, 51, 0.686312203, "Not Parasitized",
2016L, "A8", 0.4094, 45, 0.449272977, "Not Parasitized",
2016L, "A8", 0.636, 52, 0.452321347, "Not Parasitized",
2016L, "A8", 1.2313, 60, 0.570046296, "Not Parasitized",
2016L, "A8", 0.7861, 57, 0.424476087, "Not Parasitized",
2016L, "A8", 1.1206, 55, 0.673538693, "Not Parasitized",
2016L, "B2", 0.0643, 24, 0.465133102, "Not Parasitized",
2016L, "B2", 0.0807, 27, 0.409998476, "Not Parasitized",
2016L, "B2", 0.1435, 30, 0.531481481, "Not Parasitized",
2016L, "B2", 0.0292, 19, 0.425718035, "Not Parasitized",
2016L, "B2", 0.0689, 23, 0.566285855, "Not Parasitized",
2016L, "B2", 0.923, 52, 0.656434911, "Not Parasitized",
2016L, "D7", 0.706, 48, 0.638382523, "Not Parasitized",
2016L, "D7", 0.761, 54, 0.483285068, "Not Parasitized",
2016L, "D7", 0.506, 53, 0.339877886, "Not Parasitized",
2016L, "D7", 0.579, 57, 0.312646806, "Not Parasitized",
2016L, "D7", 0.689, 47, 0.663629446, "Not Parasitized",
2016L, "D7", 0.562, 55, 0.337791134, "Not Parasitized",
2016L, "D7", 0.6049, 51, 0.456008624, "Not Parasitized",
2016L, "D7", 0.744, 50, 0.5952, "Not Parasitized",
2016L, "D7", 0.59, 47, 0.568274852, "Not Parasitized",
2016L, "D7", 1.19, 57, 0.642572883, "Not Parasitized",
2016L, "D7", 0.487, 43, 0.612524683, "Not Parasitized",
2016L, "D7", 1.499, 64, 0.57182312, "Not Parasitized",
2017L, "B2", 0.264, 35, 0.61574344, "Not Parasitized",
2017L, "B2", 0.3025, 37, 0.597200561, "Not Parasitized",
2017L, "B2", 0.2666, 36, 0.571416324, "Not Parasitized",
2017L, "B2", 0.3032, 37.5, 0.574957037, "Not Parasitized",
2017L, "B2", 0.3573, 41, 0.51841964, "Not Parasitized",
2017L, "B2", 0.3339, 36, 0.71566358, "Not Parasitized",
2017L, "B2", 0.7899, 51, 0.59547233, "Not Parasitized",
2017L, "B2", 0.6915, 49, 0.587765302, "Not Parasitized",
2017L, "B2", 1.5012, 68, 0.477432322, "Not Parasitized",
2017L, "D7", 0.6741, 53, 0.452789887, "Not Parasitized",
2017L, "D7", 0.7112, 49, 0.604510026, "Not Parasitized",
2017L, "D7", 0.7173, 51, 0.540742248, "Not Parasitized",
2017L, "D7", 0.7104, 50, 0.56832, "Not Parasitized",
2017L, "D7", 0.9858, 59, 0.479990651, "Not Parasitized",
2015L, "A6", 0.5854, 47, 0.563844235, "Parasitized",
2015L, "A8", 0.5298, 48, 0.47905816, "Parasitized",
2015L, "A8", 0.8723, 51, 0.657590218, "Parasitized",
2015L, "D7", 0.5171, 46, 0.531252568, "Parasitized",
2015L, "D7", 0.55, 47, 0.529747744, "Parasitized",
2015L, "D7", 0.659, 46, 0.677036246, "Parasitized",
2015L, "D7", 0.5147, 46, 0.528786883, "Parasitized",
2016L, "A6", 1.3292, 61, 0.585599676, "Parasitized",
2016L, "A6", 0.3911, 45, 0.429190672, "Parasitized",
2016L, "A6", 0.696, 47, 0.67037169, "Parasitized",
2016L, "A6", 0.9489, 55, 0.570338092, "Parasitized",
2016L, "A6", 0.6278, 44, 0.736992863, "Parasitized",
2016L, "A8", 0.1397, 34, 0.35543456, "Parasitized",
2016L, "A8", 0.2709, 35, 0.631836735, "Parasitized",
2016L, "A8", 0.72, 51, 0.542777665, "Parasitized",
2016L, "A8", 0.399, 42, 0.538548753, "Parasitized",
2016L, "A8", 0.4075, 40, 0.63671875, "Parasitized",
2016L, "A8", 0.7956, 55, 0.478196844, "Parasitized",
2016L, "A8", 0.4075, 41, 0.591256656, "Parasitized",
2016L, "A8", 0.8086, 53, 0.543132922, "Parasitized",
2016L, "A8", 0.6535, 49, 0.555465835, "Parasitized",
2016L, "A8", 0.8723, 53, 0.58591992, "Parasitized",
2016L, "A8", 0.9278, 57, 0.500990858, "Parasitized",
2016L, "A8", 1.1383, 57, 0.614656062, "Parasitized",
2016L, "B2", 0.13, 36, 0.278635117, "Parasitized",
2016L, "B2", 1.1902, 57, 0.642680879, "Parasitized",
2016L, "D7", 0.2864, 42, 0.386567325, "Parasitized",
2016L, "D7", 0.4656, 41, 0.675556071, "Parasitized",
2016L, "D7", 0.3965, 45, 0.435116598, "Parasitized",
2016L, "D7", 1.1652, 58, 0.597195457, "Parasitized",
2017L, "A6", 1.7541, 68, 0.557863067, "Parasitized",
2017L, "B2", 0.8721, 54, 0.553840878, "Parasitized",
2017L, "D7", 0.5807, 55, 0.349030804, "Parasitized"
)
Here is my code:

Kplot <- ggplot(YearsPooled, aes(x=factor(Lake), y=K, fill = Year)) + geom_boxplot(aes(fill = factor(YearsPooled$Year)),position=position_dodge(1)) + stat_summary(fun.y="mean", geom="point", shape=23, size=2, fill="white") + theme_bw() + theme(plot.background = element_blank(), panel.grid.minor = element_blank(), panel.grid.major = element_blank()) + theme(axis.line = element_line(color = 'black')) + guides(shape=guide_legend(title=NULL), colour=guide_legend(title=NULL), fill=guide_legend(title=NULL)) + scale_fill_manual(values = c("grey40", "grey65", "grey90")) + theme(axis.title.y = element_text(family="Times", size = 12)) + theme(axis.title.x = element_text(family="Times", size = 12)) + theme(legend.text = element_text(size=12)) + facet_wrap( ~ YearsPooled$Parasites) + theme(strip.text = element_text(family="Times", face="bold", (size=12))) + labs(x="Lake", y="Condition Factor K")

> Kplot + theme(axis.title.y = element_text(family="Times", size = 12)) + theme(axis.title.x = element_text(family="Times", size = 12)) + theme(legend.text = element_text(size=12)) + theme(strip.text = element_text(family="Times", color = "black", face="bold", size=12)) + labs(x="Lake", y="Condition Factor K") + theme(legend.position = "top") + theme(axis.text = element_text(size = 11))

Here is the figure that this code is giving me:

I can't seem to figure out how to add mean values for each box plot separately. Right now with my code it seems to be calculating the total mean (for all years) for each lake. I am trying to calculate the mean for each lake for each year. I am sure if I figure out this code, I can then use the same code to add upper and lower standard deviation or error. Any suggestions on figuring this out?

Thanks!

You need to add a group = Year to your call to stat_summary() so it knows to calculate over the Year as well as the Lake

ggplot(YearsPooled, aes(x=factor(Lake), y=K)) + 
  geom_boxplot(aes(fill = factor(Year)), position=position_dodge(1)) + 
  stat_summary(fun.y="mean", geom="point", shape=23, size=2, 
                      position=position_dodge(1),
                      mapping = aes(group= factor(Year))) + 
  facet_wrap(~Parasites)
1 Like

This worked great thank you, it was a quick fix!!!

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.