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
当我尝试定义自定义调色板时,比如蓝色和红色,我得到的是洋红色而不是蓝色。让我们考虑取自 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