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