#r #ggplot2
Вопрос:
scale_color_manual, когда заданные цвета не генерируют ожидаемый результат. Минимальный воспроизводимый код приведен ниже:
statsSomeSet <- read.table(header=TRUE, text="
methods min max mean
<fct> <dbl> <dbl> <dbl>
Method1_LR 40 80 60
Method2_LR 50 90 70
Method3_LR 30 70 50
Method1_RF 50 90 70
Method2_RF 40 80 60
Method3_RF 30 70 50
")
statsSomeSet$methods <- factor(statsSomeSet$methods, levels = statsSomeSet$methods)
p <- ggplot(data = statsSomeSet, mapping = aes(x = methods, y = mean))
geom_pointrange(mapping = aes(ymin = min, ymax = max))
scale_color_manual(values = c("green", "red", "blue","green", "red", "blue" ))
p labs(title = "Methods")
Комментарии:
1. Попробуйте сопоставить переменную с эстетикой цвета, например
aes(..., color=methods)
. (;2. @стефан Спасибо, это работает, но почему он дает один и тот же цвет для разных имен (что я все равно хотел). Мне любопытно, как и почему он это делает. Но в легенде перечислены 6 различных методов
3. У вас есть шесть методов и прошло шесть цветов. Следовательно, по умолчанию ggplot2 упорядочивает методы в алфавитном порядке и также назначает цвета в этом порядке. Вероятно, существуют более простые способы достижения желаемого результата. Вместо передачи шести цветов вы можете добавить в свой df столбец, содержащий только название метода, т. Е. без суффикса, сопоставляющего этот столбец с цветовой эстетикой. В этом случае было бы достаточно передать только три цвета в scale_color_manual.
Ответ №1:
Основываясь на комментарии @stefan, вы можете использовать separate
функцию from tidyr
, чтобы разделить столбец «Методы» на два столбца, а затем сопоставить первый с цветовой эстетикой.
library(tidyverse)
statsSomeSet <- read.table(header=TRUE, text="
methods min max mean
Method1_LR 40 80 60
Method2_LR 50 90 70
Method3_LR 30 70 50
Method1_RF 50 90 70
Method2_RF 40 80 60
Method3_RF 30 70 50
")
statsSomeSet_separated <- statsSomeSet %>%
separate(methods, c('method_a', 'method_b'), sep="_")
p <- ggplot(data = statsSomeSet_separated, mapping = aes(x = paste(method_a, method_b), y = mean, color = method_a))
geom_pointrange(mapping = aes(ymin = min, ymax = max))
p labs(x = 'Methods', title = "Methods")