R ggplot прозрачность - альфа-значения зависят от другой переменной

У меня есть следующие данные: [пример из R-книги Cookbook]

Cultivar Date Weight sd          n  se          big
c39     d16   3.18  0.9566144   10  0.30250803  TRUE
c39     d20   2.8   0.2788867   10  0.08819171  TRUE
c39     d21   2.74  0.9834181   10  0.3109841   TRUE
c52     d16   2.26  0.4452215   10  0.14079141  FALSE
c52     d20   3.11  0.7908505   10  0.25008887  TRUE
c52     d21   1.47  0.2110819   10  0.06674995  FALSE

Я хотел бы иметь штриховую диаграмму, где прозрачность барьера зависит от переменной big.

Я пробовал следующее, где я пытался установить значения alpha в зависимости от разных значений big:

ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(position="dodge", stat="identity")
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
  geom_bar(position="dodge", stat="identity", alpha=cabbage_exp$big=c("TRUE"= 0.9, "FALSE" = 0.35)) 
ggplot(cabbage_exp, aes(x=Date, y=Weight, fill=Cultivar)) +
 geom_bar(position="dodge", stat="identity", alpha=big=c("TRUE"= 0.9, "FALSE" = 0.35))

Я хотел бы иметь различную прозрачность в барах в зависимости от значения большой переменной. Любая помощь или руководство очень ценится!

Ответ 1

Другая возможность, использующая scale_alpha_discrete, где аргумент range может использоваться для установки ваших желаемых значений alpha для каждого уровня "большой".

ggplot(data = cabbage_exp, aes(x = Date, y = Weight, fill = Cultivar, alpha = big)) +
  geom_bar(position = "dodge", stat = "identity") +
  scale_alpha_discrete(range = c(0.35, 0.9))

enter image description here

Ответ 2

Проблема заключается в том, что ваша переменная дискретна, а масштаб alpha непрерывный. Один из способов сделать это - вручную вычислить ваши альфа-значения перед построением графика:

alpha <- ifelse(d$big, 0.9, 0.35)
ggplot(d, aes(x=Date, y=Weight, fill=Cultivar)) +
    geom_bar(position="dodge", stat="identity", aes(alpha=alpha))

Недостатком является то, что вы не получите правильную легенду для своих альфа-значений. Вы можете удалить его с помощью этого:

ggplot(d, aes(x=Date, y=Weight, fill=Cultivar)) +
    geom_bar(position="dodge", stat="identity", aes(alpha=big)) +
    scale_alpha_continuous(guide=FALSE)

Конечный результат:

enter image description here