Я вижу 2 способа сделать это:
Простой способ : установите color = Sex
, а затем используйте alpha = Ratio
для регулировки насыщенности цвета.
ggplot(DF1) +
geom_point(aes(X, Y, color = Sex, alpha = Ratio)) +
scale_color_manual(values = c('Male' = 'blue', 'Female' = 'red'))
Этот подход прост и не требует изменения переменных, но вы получаете:
Red -> Clear -> Blue
градиент вместо Red -> White -> Blue
градиента
Более приятный путь : Если вы хотите сохранить более четкий Red -> White -> Blue
градиент, вы должны объединить Sex
и Ratio
в новую переменную, которая описывает ваши желаемые цвета, прежде чем перейти к ggplot
.
Секс - это factor
, поэтому мы можем преобразовать его в numeric
и затем изменить его на -1:1
масштаб, а не 1:2
масштаб. Затем мы умножаем его на Ratio
, чтобы получить единственную числовую шкалу sex_ratio
, которая включает в себя Sex
и Ratio
.
DF2 <- DF1 %>%
mutate(sex_ratio = (as.numeric(Sex) * 2 - 3) * Ratio)
Теперь мы можем использовать scale_color_gradient2
, чтобы сделать сине-бело-красную градиентную шкалу:
ggplot(DF2) +
geom_point(aes(X, Y, color = sex_ratio)) +
scale_color_gradient2(low = 'red', mid = 'white', high = 'blue')
Если вы действительно хотите, чтобы sex_ratio
был положительным диапазоном от 0 до 1, просто настройте значения и установите midpoint
градиента вручную:
DF3 <- DF1 %>%
mutate(sex_ratio = ((as.numeric(Sex) * 2 - 3) * Ratio + 1) / 2)
DF3$sex_ratio
[1] 0.40 0.75 0.70 0.10 0.55 0.75
ggplot(DF3) +
geom_point(aes(X, Y, color = sex_ratio)) +
scale_color_gradient2(low = 'red', mid = 'white', high = 'blue', midpoint = 0.5)