R语言Plotly子图自定义调色板配色不生效问题如何解决
问题解决方法
失效原因
- 你在分组迭代的
do()函数内给单条折线传入了3个颜色值,每个分组单独绘图时Plotly无法匹配对应颜色,导致配置不生效 do()是dplyr已不推荐使用的旧语法,也可能存在兼容性问题
修复后的代码(推荐写法)
我们先定义分组和自定义颜色的映射关系,分组绘图时自动匹配当前分组对应的颜色即可:
library(plotly) library(dplyr) # 自定义调色板,和分组值一一对应 palette <- c("a" = "blue", "b" = "red", "c" = "green") data.frame(x = sample(letters[1:3],30,replace = TRUE)) %>% mutate(y = rnorm(30), z = runif(30,10,20)) %>% group_by(x) %>% # 用group_modify替代do做分组迭代 group_modify(~{ # 提取当前分组对应的颜色 line_color <- palette[[cur_group()$x]] tibble(plot = list( plot_ly(.x, x = ~y, y = ~z, type = "scatter", mode = "lines", line = list(color = line_color)) )) }) %>% pull(plot) %>% subplot(nrows = 1, shareX = FALSE, shareY = TRUE, margin = 0.0001)
如果你的分组是动态生成的,可以用分组序号取色,不需要提前写死分组名:
library(plotly) library(dplyr) palette <- c("blue", "red", "green") data.frame(x = sample(letters[1:3],30,replace = TRUE)) %>% mutate(y = rnorm(30), z = runif(30,10,20)) %>% group_by(x) %>% group_modify(~{ line_color <- palette[cur_group_id()] tibble(plot = list( plot_ly(.x, x = ~y, y = ~z, type = "scatter", mode = "lines", line = list(color = line_color)) )) }) %>% pull(plot) %>% subplot(nrows = 1, shareX = FALSE, shareY = TRUE, margin = 0.0001)
内容的提问来源于stack exchange,提问作者MatCordTo
相关产品推荐
相关产品推荐

