Plotly 在 R 中混合调色板颜色

Plotly is blending palette colors in R

当我尝试定义自定义调色板时,比如蓝色和红色,我得到的是洋红色而不是蓝色。让我们考虑取自 plotly 文档的示例:

library(plotly)
pal <- c("red", "blue", "green")
p <- plot_ly(data = iris, x = ~Sepal.Length, y = ~Petal.Length, 
      color = ~Species, colors = pal)
p

这按预期工作。三个物种中的每一个都有自己的颜色:红色、蓝色或绿色。

然后我准备一个新的数据集,删除 "virginica",并绘制结果:

library(dplyr)
pal <- c("red", "blue", "green")
iris_new<- filter(iris, Species == "setosa" | Species == "versicolor")
p <- plot_ly(data = iris_new, x = ~Sepal.Length, y = ~Petal.Length, 
      color = ~Species, colors = pal)
p

现在 "setosa" 是红色,"versicolor" 是蓝色。我们不使用绿色,所以删除它似乎是合理的:

pal <- c("red", "blue")
iris_new<- filter(iris, Species == "setosa" | Species == "versicolor")
p <- plot_ly(data = iris_new, x = ~Sepal.Length, y = ~Petal.Length, 
      color = ~Species, colors = pal)
p

结果显然应该与前面的代码块相同,但实际上它不是:蓝色被洋红色取代,并且很奇怪。

我认为这可能只是因为您将 2 色调色板映射到 3 级因子 - 直到您从 Species 因子中删除未使用的级别,它仍然被视为 [=11 的属性=] 变量并将影响它的绘制方式。

降低因子水平会使颜色表现出您预期的效果:

iris_new<- filter(iris, Species == "setosa" | Species == "versicolor") %>%
    mutate(Species = droplevels(Species))
p <- plot_ly(data = iris_new, x = ~Sepal.Length, y = ~Petal.Length, 
             color = ~Species, colors = pal)
p