我们正在构建一个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))
但是当我从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))
有什么方法可以将颜色锁定在分类变量上,让 "2 "永远保持相同的颜色?
我想你必须在调用中传递更新颜色,像这样......但我认为这是非常粗糙的。
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))