R - несколько сгруппированных палитр - PullRequest
0 голосов
/ 09 января 2019

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

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

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

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

1 Ответ

0 голосов
/ 11 января 2019

Следующий код работает со статическим 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()

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

enter image description here

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

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

enter image description here

Оказывается, однако, что 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)

enter image description here

...