Plotly (R) - 饼图。如何固定每组的颜色分配?

问题描述 投票:0回答:1

我们正在构建一个Shiny应用程序,其中我们使用一个动态的Plotly饼图。用户可以选择要包含在图中的变量。

添加自定义颜色代码允许我添加我们的自定义颜色,但它们不会像在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

但是当我从data.frame中删除dis == 1时(就像我的用户在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 "永远保持相同的颜色?

r shiny plotly pie-chart
1个回答
1
投票

我想你必须在调用中传递更新颜色,像这样......但我认为这是非常粗糙的。

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

© www.soinside.com 2019 - 2024. All rights reserved.