Ggplot2 изменить цвет полос. Ошибка n слишком большая, допустимый максимум для палитры

#r #ggplot2 #pca

#r #ggplot2 #pca

Вопрос:

У меня есть следующий график, основанный на этом наборе данных

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

Моя цель — сопоставить цвета на каждой полосе с именем цвета «ТЕГА».

Я попытался использовать палитру

 palette <- RColorBrewer::brewer.pal(length(unique(tidied_pca$Tag)),name = 'Set1')
 

но я получаю эту ошибку

     Warning message:
In RColorBrewer::brewer.pal(length(unique(tidied_pca$Tag)), name = "Set1") :
  n too large, allowed maximum for palette Set1 is 9
Returning the palette you asked for with that many colors
 

Исходный код для отображения графика находится здесь:

  tidied_pca %>%
  filter(PC == "PC2") %>%
  top_n(40, abs(Contribution)) %>%
  mutate(Tag = reorder(Tag, Contribution)) %>%
  ggplot(aes(Tag, Contribution, fill = Tag))  
  geom_col(show.legend = FALSE, alpha = 0.8)  
  theme(axis.text.x = element_text(angle = 90, hjust = 1, vjust = 0.5), 
        axis.ticks.x = element_blank())   
  labs(x = "Bottle Color percentages",
       y = "Relative importance in principle component",
       title = "What color accounts for most variation PCA2")
 

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

1. Попробуйте поместить все желаемые цвета (я предполагаю, что это будут цвета по оси x) в один вектор (например vec <- c("blue","red","green") , затем передать этот вектор для fill аргумента в ggplot

2. Это не работает, пробовал это раньше. Если работает с вами, не могли бы вы опубликовать изображение графика с правильными цветами?

Ответ №1:

Чтобы просто использовать цвета в столбце тегов, добавьте

    scale_fill_identity()
 

Но для фактического сообщения об ошибке нет палитры color brewer, в которой было бы столько разных цветов. Для Set1 , максимальное количество цветов, которые вы получаете, равно 9. Вы могли бы интерполировать между этими значениями, чтобы получить больше цветов, но тогда вы, вероятно, потеряете приятное свойство иметь легко различимые цвета. Вы можете сделать это с помощью базовой colorRampPalette функции R.

 palette <- colorRampPalette(RColorBrewer::brewer.pal(9,name = 'Set1'))(length(unique(tidied_pca$Tag)))
 

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

1. У меня это не работает, не могли бы вы опубликовать изображение графика с правильными цветами?

2. Мне нужно больше кофе!! На самом деле это сработало, большое спасибо!!