Установите отдельные альфы для каждой строки в графике ggplot

Я хочу построить график с помощью ggplot, используя geom_line. Я составил следующий репрекс, чтобы раскрыть проблему:

library(ggplot2)

data <- data.frame(Value = rnorm(20), 
                        Obs = c(1:10,1:10),
                        Var = c(rep("A", 10), rep("B", 10)),
                        Alpha = c(rep(0.7, 10), rep(0.99, 10)))
     
ggplot(data, aes(x = Obs, y = Value, col = Var, alpha = Alpha)) +
       geom_line()

Создано 9 июля 2020 г. с помощью пакета reprex (v0.3.0)

Я хочу, чтобы переменная A была немного более прозрачной, чем переменная B. Поэтому я установил альфу на 0,7 и 0,99 внутри фрейма данных для A и B соответственно. Однако это дает график с A, намного более прозрачным, чем B. На самом деле, изменение альфы до 0,95 вообще не меняет внешний вид.

Я был бы очень благодарен за некоторые рекомендации.


person BerriJ    schedule 09.07.2020    source источник
comment
Попробуйте alpha=as.factor(Alpha). Или ... + scale_alpha_discrete(...). По умолчанию ggplot использует непрерывную шкалу прозрачности.   -  person Limey    schedule 09.07.2020


Ответы (2)


Вам нужно добавить scale_alpha_identity к вашему графику. Это позволяет интерпретировать значение Alpha буквально как значение альфы, которое вы хотите для своей строки:

ggplot(data, aes(x = Obs, y = Value, col = Var, alpha = Alpha)) +
  geom_line() +
  scale_alpha_identity()

введите здесь описание изображения

person Allan Cameron    schedule 09.07.2020

Измените свою альфа-эстетику, чтобы она определялась Var, а затем используйте дискретную шкалу. Будет выдано предупреждение, потому что авторы ggplot2 считают, что это странно.

ggplot(data, aes(x = Obs, y = Value, col = Var, alpha = Var)) +
  scale_alpha_discrete(limits = c("A","B"), range = c(0.7, 0.99), guide = FALSE) + 
  geom_line()
person Tyler Smith    schedule 09.07.2020