I have a simple ggplot boxplot like in this example
library(ggplot2)
dat <- ToothGrowth
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
p <- ggplot(ToothGrowth, aes(x=dose, y=len))
geom_boxplot()
facet_grid(~supp)
p
Goal:
I want the boxes of the quantiles in different colors, as seen in the image below.
Do you have any suggestions?
CodePudding user response:
You could do like this: First, calculate the median, first and third quartile (quart1 and quart3) for ToothGrowth, grouped by supp and dose. Afterwards you can fill in the lower and upper rectangles of the boxplots. Since you wanted four different colors, I added four different rectangles.
ToothGrowth <- ToothGrowth %>% mutate(dose = factor(dose)) %>% group_by(supp, dose) %>%
mutate(median = median(len), quart1 = quantile(len, 0.25), quart3 = quantile(len, 0.75))
ggplot(ToothGrowth, aes(dose, len))
geom_boxplot(width = 0.6)
facet_grid(~supp)
geom_rect(data = subset(ToothGrowth, supp == "OJ"),
aes(xmin = as.numeric(dose) - 0.3, xmax = as.numeric(dose) 0.3, ymin = quart1, ymax = median),
fill = "#008AA7", color = "black")
geom_rect(data = subset(ToothGrowth, supp == "VC"),
aes(xmin = as.numeric(dose) - 0.3, xmax = as.numeric(dose) 0.3, ymin = quart1, ymax = median),
fill = "#005645", color = "black")
geom_rect(data = subset(ToothGrowth, supp == "OJ"),
aes(xmin = as.numeric(dose) - 0.3, xmax = as.numeric(dose) 0.3, ymin = median, ymax = quart3),
fill = "#A2EFFD", color = "black")
geom_rect(data = subset(ToothGrowth, supp == "VC"),
aes(xmin = as.numeric(dose) - 0.3, xmax = as.numeric(dose) 0.3, ymin = median, ymax = quart3),
fill = "#90AC9E", color = "black")
Which gives the following plot:


