aes_string не оценивает вложенный ifelse правильно

Я пользуюсь вложенным ifelse операторы для выделения экстремально высоких / низких значений в наборе данных. Вместо того, чтобы добавить дополнительный столбец для эстетики цвета (я знаю, как это сделать), я хотел попробовать использовать aes_string(... , colour = ...) так как этот сюжет войдет в функцию (отсюда aes_string вместо aes).

Ниже приведен простой пример ggplot2 оценивая вложенные ifelse заявления и неправильно раскраски неправильно.

library(ggplot2)
theme_set(theme_bw())
sample <- data.frame(x = 1:10, y = 1:10)

# [Plot 1] Works fine using aes and stipulating variables
ggplot(sample, aes(x = x, y = y)) +
  geom_point(aes(colour = ifelse(x < 3, 1, ifelse(x > 7, 10, x)))) +
  scale_colour_identity()

# [Plot 2] "x" replaced by "var" and "aes" replaced by "aes_string"
var = "x"
ggplot(sample, aes(x = x, y = y)) +
  geom_point(aes_string(colour = ifelse(var < 3, 1, ifelse(var > 7, 10, var)))) +
  scale_colour_identity()

aes () работает правильно

[График 1] Вы можете видеть в начале и в конце цвета выделены синим (1) и красным (10) соответственно.

aes_string () не работает правильно

[График 2] Вы можете видеть, что все точки выделены красным цветом (10), указывая, что что-то пошло не так.

Любая помощь приветствуется!

0 ответов

Другие вопросы по тегам