I have a code below and I would like to color the top 3 with the selected colors. Many thanks in advance.
library(ggplot2)
library(dplyr)
df <- data.frame(dose = c("D0.5", "D1", "D2", "D3", "D4", "D5"),
len = c(4.2, 10, 29.5, 5, 7, 15))
df <- dplyr::mutate(df, top3 = rank(-len) %in% 1:3)
# Basic barplot
p <- ggplot(data = df, aes(x = reorder(dose, -len), y = len)) +
geom_bar(stat = "identity", fill = ifelse(df$top3 == TRUE, c("blue", "yellow", "green"), "grey50")) +
#color = ifelse(df$top3 == TRUE, c("red", "yellow", "green"), "grey50")) +
coord_flip()
p
>Solution :
You could do something like this:
df <- data.frame(dose = c("D0.5", "D1", "D2", "D3", "D4", "D5"),
len = c(4.2, 10, 29.5, 5, 7, 15))
df <- dplyr::mutate(df, rank = factor(rank(-len), labels = dose))
fill_colors = c("blue", "yellow", "green")
other_colors = rep("grey50", nrow(df)-length(fill_colors))
my_scale <- c(fill_colors, other_colors)
withr::with_options(
list(ggplot2.discrete.fill = my_scale),
ggplot(data = df, aes(x = reorder(dose, -len), y = len)) +
geom_bar(stat = "identity", aes(fill = rank)) +
scale_fill_discrete() +
coord_flip()
)
