Основная проблема заключается в том, что вы должны использовать другой aes()
в строке geom_bar
и вызвать в этом аргумент fill
. Затем, как упоминалось выше @ dc37, вам просто нужно использовать scale_fill_identity
.
Еще одна вещь, на которую следует обратить внимание, это то, что вам не нужно определять переменные вне вашего фрейма данных, как в вопросе. Вы можете просто вызывать их по именам столбцов.
Вот пример с некоторыми составленными данными
library(dplyr)
library(ggplot2)
df <- data.frame(question = LETTERS[1:15],
score = rnorm(15, 90,5))
Вместо вложенного оператора ifelse, использование case_when
гораздо более читабельно для человека .
df <- df %>%
mutate(cond = case_when(
score > 94 ~ 'darkgreen',
score < 0.7 ~ 'red',
TRUE ~ 'yellow' #anything that does not meet the criteria above
))
Затем вы можете использовать заливку в aes()
вызове geom_bar
и добавить scale_fill_identity
ggplot(data = df, aes(x = question, y =score)) +
geom_bar(stat = "identity", color = 'blue', aes(fill = cond)) +
scale_fill_identity() +
coord_flip()