在图中定制离散色标

时间:2016-08-03 10:21:18

标签: r plotly

我想自定义plotly图中的颜色。根据{{​​3}}:

,这适用于连续变量和比例
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 个答案:

答案 0 :(得分:5)

这不是一个阴谋问题,而是ColorBrewer(以及相关的RColorBrewer包)的设计功能。当您将color分配给等于或超过三个级别的因素时,您会注意到警告消失,例如

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

这是因为ColorBrewer的最小数据类数是3(您可以从http://colorbrewer2.org/看到,其中不能选择少于3个类)。例如,在?brewer.pal(由plotly引用的函数)中,它具体说明了

  

所有顺序调色板都有3种变体   不同的值,最多9个不同的值。

     

[...]

     

对于定性调色板,可用的最小数量的不同值总是3

由于build_plotly()(函数plotly()内部调用)始终调用brewer.pal()(请参阅第474行here),因此无法在不重写{{1函数不能用少于3个数据类调用build_plotly()

在此期间,要关闭警告,请将绘图输出分配给对象,并将brewer.pal()语句包装在print(object)中,如下所示:

suppressWarnings()