Основная ошибка заключается в наличии двух переменных для одной оси x: X
и positions
. Для графика требуется только positions
.
Я сосредоточусь на получении цветов в нужных местах, затем можно добавить другие слои.
library(ggplot2)
ggplot(a, aes(positions, M, fill = positions)) +
geom_col(width = 0.75, position = position_dodge(0.1), colour = "black", size = 0.9) +
scale_x_discrete(limits = positions) +
coord_cartesian(ylim = c(0, NA)) +
scale_fill_manual(values = colors, breaks = positions) +
theme_bw()
введите описание изображения здесь
Данные
set.seed(2020) # needed to make the y axis values reproducible
colors <- c("#f2f0f7", "#dadaeb", "#bcbddc", "#9e9ac8", "#756bb1", "#54278f")
positions <- c("P1", "P8", "P3", "P4", "P5", "P6")
positions <- factor(positions, levels = c("P1", "P8", "P3", "P4", "P5", "P6")) # order on legend
M <- sample(10, length(positions), TRUE)
a <- data.frame(M, positions, colors)