Динамически присваивать символьный вывод переменной цвету

#r #ggplot2 #tidyr

#r #ggplot2 #tidyr

Вопрос:

Очень смущен тем, почему следующее не работает.

У меня есть переменное состояние. Это динамически изменяется на основе вывода выпадающего списка.

Например, State=»Алабама»

Я присваиваю легенде следующие цвета:

  cols= c(State = "black", "All States" = "red") 
 

Который в конечном итоге передается в scale_fill_manual

Приведенное выше создает правильную метку легенды для Алабамы, однако в легенде не отображается полоса / цвет.

Если я вместо этого сделаю следующее:

 cols= c("Alabama" = "black", "All States" = "red") 
 

легенда верна.

Я пробовал

 paste0(State) = "black", as.character(State) = "black" 
 

безрезультатно.

Где я ошибаюсь?

Комментарии:

1. Пожалуйста, покажите небольшой воспроизводимый пример с кодом

Ответ №1:

Мы можем использовать setNames для создания именованного вектора

 State <- "Alabama"
cols = setNames(c("black", "red"), c(State, "All States")) 
 

Комментарии:

1. Хотя это не динамично, что происходит при изменении переменной состояния?

2. @Bjc51192 Он динамический. Вы можете присвоить значение объекту, то есть «Состоянию», и передать его. Обновлен код

3. Это сработало, можете ли вы объяснить логику того, что делает вышеупомянутое?

4. @Bjc51192 Присвоение в lhs вычисляет его буквально вместо значения в этом объекте, и именно по этой причине вы получите c(State = 1) имя «Состояние» вместо «Алабма». При setNames этом мы присваиваем вектору имена. Здесь объект ‘State’ вычисляется для возврата значения в этом векторе c(State, 'All States')