我们正在构建一个Shiny应用程序,其中使用了动态绘图饼图。用户可以选择要包含在图中的变量。
添加自定义颜色代码使我可以添加自定义颜色,但是它们不会像在散布条形图中一样(使用colors命令)坚持分组变量。
例:
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))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句