自定义离散色标尺在Plotly中

4

我想自定义plotly图中的颜色。按照文档所述,对于连续变量和尺度,这是有效的:

library(plotly)

plot_ly(iris, x = Petal.Length, y = Petal.Width,
             color = Sepal.Length, colors = c("#132B43", "#56B1F7"),
             mode = "markers")

如果我将参数更改为离散颜色(字符或因子),代码仍然能够运行但会出现警告:
> plot_ly(iris, x = Petal.Length, y = Petal.Width,
          color = Sepal.Length>6, colors = c("#132B43", "#56B1F7"),
          mode = "markers")


Warning message:
In RColorBrewer::brewer.pal(N, "Set2") :
  minimal value for n is 3, returning requested palette with 3 different levels

我要如何正确地做这件事?

1个回答

9

这不是 plotly 的问题,而是 ColorBrewer(以及相关的 RColorBrewer 包)的设计特性。您会注意到当您将color赋值给具有三个或更多级别的因子时,警告消失,例如:

plot_ly(iris, x = Petal.Length, y = Petal.Width,
        color = cut(Sepal.Length, 3), colors = "Set1",
        mode = "markers")

这是因为ColorBrewer的最小数据类别数量是三个(可以从http://colorbrewer2.org/查看,无法选择少于三个类别)。例如,在?brewer.pal(由plotly引用的函数)中,它明确指出:

所有连续调色板都可用于从3个不同值到9个不同值的变体中。

[...]

对于定性调色板,可用的不同值的最小数量始终为3。

由于build_plotly()plotly()在内部调用的函数)总是调用brewer.pal()(请参见这里的第474行),因此如果数据类别少于3个,则无法解决此问题,除非重写build_plotly()函数以避免使用少于3个数据类别调用brewer.pal()

同时,要关闭警告,请将图形输出分配给对象,并像这样在print(object)语句周围包装suppressWarnings()

plotly_plot <- plot_ly(iris, x = Petal.Length, y = Petal.Width,
      color = Sepal.Length>6, colors = c("#132B43", "#56B1F7"),
      mode = "markers")

suppressWarnings(print(plotly_plot))

1
没问题。已经提交了一个关于此问题的错误报告:https://github.com/ropensci/plotly/issues/670 - RoyalTS
有什么方法可以暂时消除这个警告吗?我尝试了抑制它,但好像在错误的地方进行了抑制,因为它仍然显示。我还尝试将一个未使用的第三级添加到因子中。但是,那也似乎不起作用。 - RoyalTS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接