I have been looking at a bunch of answers but I could not find anything that answers my problem. I have the following dataset:
structure(list(Quail = c("28", "28", "28", "28", "29", "29",
"29", "29", "30", "30", "30", "30", "4", "4", "4", "4", "4",
"5", "5", "5", "5", "5", "6", "6", "6", "6", "16", "16", "16",
"16", "17", "17", "17", "17", "17", "18", "18", "18", "18", "52",
"52", "52", "52", "53", "53", "53", "53", "54", "54", "54", "54"
), day = c(1, 3, 5, 7, 1, 3, 5, 9, 1, 3, 5, 7, 1, 3, 5, 7, 9,
1, 3, 5, 7, 9, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3, 5,
7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7), Group = c("var", "var",
"var", "var", "var", "var", "var", "var", "var", "var", "var",
"var", "varL", "varL", "varL", "varL", "varL", "varL", "varL",
"varL", "varL", "varL", "varL", "varL", "varL", "varL", "varLQ",
"varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ",
"varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varQ", "varQ",
"varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ",
"varQ", "varQ"), Equi = c(NA, 5.966699108, 2.179348795, NA, NA,
5.47029668, 4.606832566, 4.123227924, NA, 6.200198499, 3.807239274,
2.121998353, NA, 6.122346998, 3.161297444, 2.618107834, 2.488914738,
NA, 5.80659996, 3.272308721, 3.012209525, 2.750162661, NA, 5.752224579,
4.885757526, 2.515186667, NA, 5.494711674, 4.665176685, 4.017052221,
NA, 6.165528697, 4.969614582, 2.894064483, 2.600701052, NA, 6.368332793,
4.316409804, 6.030505124, NA, 5.173073878, 4.038968216, 2.859379995,
NA, NA, 4.17091987, 2.916909106, NA, 5.926815246, 5.910377652,
NA), Norm.pi = c(5.8, 3.9, 3.1, 2.5, 4.7, 2.5, 5.1, 10.1, 3.4,
2.8, 5.4, 2.6, 4.3, 0.9, 4, 7.3, 4.1, 5.8, 1.8, 4.2, 8.5, 20.4,
4.6, 2.1, 4.3, 11.3, 2.5, 2.9, 4, 4.4, 2.7, 2.2, 2.7, 5.6, 4.5,
2.5, 2, 4.5, 7.1, 5.4, 2.6, 5.1, 8.3, 6.7, 2.8, 3.6, 4.6, 5.8,
3, 3, 6.3)), row.names = c(NA, -51L), groups = structure(list(
Quail = c("16", "16", "16", "16", "17", "17", "17", "17",
"17", "18", "18", "18", "18", "28", "28", "28", "28", "29",
"29", "29", "29", "30", "30", "30", "30", "4", "4", "4",
"4", "4", "5", "5", "5", "5", "5", "52", "52", "52", "52",
"53", "53", "53", "53", "54", "54", "54", "54", "6", "6",
"6", "6"), day = c(1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3, 5, 7,
1, 3, 5, 7, 1, 3, 5, 9, 1, 3, 5, 7, 1, 3, 5, 7, 9, 1, 3,
5, 7, 9, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7, 1, 3, 5, 7),
Group = c("varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ",
"varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ", "varLQ",
"var", "var", "var", "var", "var", "var", "var", "var", "var",
"var", "var", "var", "varL", "varL", "varL", "varL", "varL",
"varL", "varL", "varL", "varL", "varL", "varQ", "varQ", "varQ",
"varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ", "varQ",
"varQ", "varL", "varL", "varL", "varL"), .rows = list(27L,
28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L, 37L, 38L,
39L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L,
13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 40L,
41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L, 50L, 51L,
23L, 24L, 25L, 26L)), row.names = c(NA, -51L), class = c("tbl_df",
"tbl", "data.frame"), .drop = TRUE), class = c("grouped_df",
"tbl_df", "tbl", "data.frame"))
I am using ggplot as:
DI.pi.equi.extended %>%
ggplot() +
geom_bar(aes(x=day, y=Norm.pi), stat = "identity", fill = "red") +
geom_bar(aes(x=day,y=Equi), stat = "identity") +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(),
axis.title.y = element_text(face = "bold", size = 22),
legend.direction = "vertical", legend.box = "horizontal") +
scale_x_continuous(breaks = c(1,3, 5, 7, 9), limits = c(0,10)) +
scale_y_continuous(sec.axis = sec_axis(~ . + 10)) +
facet_grid(.~Quail + Group, scales = "free_y")
This is producing the following stacked plot:
What I am trying to plot is actually pi.Norm and Equi side by side, as dodged, but I could not make it work so far.
Suggestions?
Thank you very much in advance.
The trick is to convert the dataset to long format before plotting using e.g. tidyr::pivot_longer
. Try this:
library(ggplot2)
library(dplyr)
library(tidyr)
DI.pi.equi.extended %>%
tidyr::pivot_longer(c(Equi, Norm.pi), names_to = "name", values_to = "value") %>%
ggplot() +
geom_bar(aes(x=day, y=value, fill = name), stat = "identity", position = "dodge") +
scale_fill_manual(values = c(Norm.pi = "red", Equi = "grey")) +
theme(panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_blank(),
axis.line = element_line(colour = "black"),
axis.text.x = element_text(),
axis.title.y = element_text(face = "bold", size = 22),
legend.direction = "vertical", legend.box = "horizontal") +
scale_x_continuous(breaks = c(1,3, 5, 7, 9), limits = c(0,10)) +
scale_y_continuous(sec.axis = sec_axis(~ . + 10)) +
facet_grid(.~Quail + Group, scales = "free_y")
#> Warning: Removed 15 rows containing missing values (geom_bar).
Created on 2020-05-19 by the reprex package (v0.3.0)