Plotly (R) - P ie диаграмма: Как зафиксировать цвет присвоения цвета для каждой группы? - PullRequest
1 голос
/ 26 мая 2020

Мы создаем приложение Shiny, в котором мы используем динамическую c диаграмму p ie. Пользователи могут выбирать переменные для включения в график.

Добавление пользовательских цветовых кодов позволяет мне добавлять наши пользовательские цвета, но они не будут придерживаться переменной группировки, как в случае с линейчатыми диаграммами plotly (с помощью команды цветов ).

Пример:

library(plotly)

dat <- data.frame(dis = c(1,2,3), value = c(20,30,24))

plot_ly(dat, labels = ~dis, values = ~value, sort = F, 
        marker = list(colors = c("1" = "#B76C9E", 
                                 "2" = "#4285F4",
                                 "3" = "#EA4335"))) %>%
  add_pie(hole = 0.3) %>%
  layout(legend = list(orientation = 'h'), margin = list(l = 0 , r = 0, t = 0, b = 100, pad = 1),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

enter image description here

Но когда я удаляю dis == 1 из data.frame (например, мой пользователи будут делать это в приложении Shiny) цвета меняются и не сохраняются назначенный цвет:

dat2 <- data.frame(dis = c(2,3), value = c(30,24))

plot_ly(dat2, labels = ~dis, values = ~value, sort = F, 
        marker = list(colors = c("1" = "#B76C9E", 
                                 "2" = "#4285F4",
                                 "3" = "#EA4335"))) %>%
  add_pie(hole = 0.3) %>%
  layout(legend = list(orientation = 'h'), margin = list(l = 0 , r = 0, t = 0, b = 100, pad = 1),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

enter image description here

Есть ли способ заблокировать цвет категориальной переменной, чтобы «2» всегда имела один и тот же цвет?

1 Ответ

1 голос
/ 26 мая 2020

Думаю, вам нужно передать обновление цветов внутри вызова, что-то вроде этого .. но я думаю, что это довольно грубо:

pal = c("#B76C9E", "#4285F4","#EA4335")
names(pal) = as.character(1:3)

updated_pal = pal[unique(as.character(dat2$dis))]

plot_ly(dat2, 
labels = ~dis, values = ~value, sort = F,
marker=list(colors=updated_pal)) %>%
  add_pie(hole = 0.3) %>%
  layout(legend = list(orientation = 'h'), margin = list(l = 0 , r = 0, t = 0, b = 100, pad = 1),
         yaxis = list(showgrid = FALSE, zeroline = FALSE, showticklabels = FALSE))

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...