R - несколько сгруппированных палитр

У меня есть следующий сюжет с сюжетом:

library(plotly)
library(dplyr)
ggplot2::diamonds %>% count(cut, clarity) %>%
  plot_ly(x = ~cut, y = ~n, color = ~clarity,colors = 'Blues')

Сейчас у меня есть только одна цветовая палитра "Блюз" для всех групп. Как я могу настроить его так, чтобы у меня была одна цветовая палитра на группу? Например, мне нужна цветовая палитра

  • "Блюз" для уровня "Ярмарка"
  • "Зелень" за уровень "Хорошо"
  • "Красные" для уровня "Очень хорошо"
  • "Пурпурный" за уровень "Премиум"
  • "Серые" за уровень "Идеал"

1 ответ

Решение

Следующий код, кажется, работает со статическим ggplot2 сюжет:

library(tidyverse)
library(plotly)
library(RColorBrewer)

sPalette <- c("Blues", "Greens", "Reds", "Purples", "Greys") %>% 
              sapply(., function(x) brewer.pal(8, name = x)) %>% 
              as.vector

diamonds %>% 
  count(cut, clarity) %>% 
  ggplot(., aes(x = cut, y = n, fill = interaction(clarity, cut, sep = " - "))) + 
    geom_bar(stat = "identity", position = "dodge") + 
    scale_fill_manual(values = sPalette, guide = F) + 
    theme_minimal()

Это результат:

https://stackru.com/image s/3d7c1d6808f8d7bfd6d5efbcdd7ddbdc82da69a0.png

Соответствующий plot_ly Код создает столбцы, которые имеют большое расстояние между ними, и я не совсем уверен, почему это так:

diamonds %>% 
  count(cut, clarity) %>%
  plot_ly(x = ~cut, y = ~n, color = ~interaction(clarity, cut, sep = " - ") , colors = sPalette)

https://stackru.com/image s/324b353a1fe090a9e9fa25513d1ef0b2f0a6430f.png

Оказывается, однако, что ggplotly работает:

p <- diamonds %>% 
       count(cut, clarity) %>% 
       ggplot(., aes(x = cut, y = n, fill = interaction(clarity, cut, sep = " - "))) + 
         geom_bar(stat = "identity", position = "dodge") + 
         scale_fill_manual(values = sPalette, guide = F) + 
         theme_minimal()
ggplotly(p)

https://stackru.com/image s/71bd7a4ba12bb2f801922cd22e60f693a48b7f0c.png

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