【问题标题】:Setting pie chart colors using d3.js使用 d3.js 设置饼图颜色
【发布时间】:2014-02-19 02:29:15
【问题描述】:

我在使用 d3.pieChart 设置饼图颜色时遇到问题。我见过的文档和示例将颜色方法与十六进制颜色数组结合使用。但是,设置此选项会导致我的饼图变为白色(不可见),并且图例中的每个项目都变为黑色。

我尝试过使用 .colors 和一组五种颜色和一组六种颜色,但问题仍然存在。这可能是由于 slicesCap 的一些问题吗?

下面的代码 sn-p,但 category10 灼伤了我的眼睛,所以任何关于实现自定义颜色集的建议都将不胜感激!

pie
    .slicesCap(5)
    .legend(dc.legend().gap(3))
    .colors(d3.scale.category10())

【问题讨论】:

    标签: javascript d3.js crossfilter


    【解决方案1】:

    根据 Tayden 的回答,较新版本的 d3 的语法略有不同(即“scaleOrdinal”)

    var colorScale = d3.scaleOrdinal()
       .domain(["banana", "cherry", "blueberry"])
       .range(["#eeff00", "#ff0022", "#2200ff"]);
    

    【讨论】:

      【解决方案2】:

      您可以像这样将颜色分配给特定的值。

      var colorScale = d3.scale.ordinal()
         .domain(["banana", "cherry", "blueberry"])
         .range(["#eeff00", "#ff0022", "#2200ff"]);
      
      pie.colors(colorScale.range())
         .colorAccessor(function(d){ return colorScale.domain().indexOf(d.fruitType); });
      

      这个解决方案有点老套,但我无法仅使用chart.colorDomain 让它工作,并且现在调用chart.colors 中的函数似乎会引发错误。

      【讨论】:

      • 您遇到了什么样的错误?我正在尝试绘制 dc.rowChart() 并收到错误 A negative value is not valid. ("-2")
      【解决方案3】:

      仅仅传递一组颜色值是行不通的,因为.colors() 函数需要一个色标,就像d3.scale.category10() 创建的那样。刻度是函数,它接受输入数据并返回一个值;在这种情况下,返回值是 10 种颜色之一。

      对于初学者,您可以尝试其他 d3 内置色标之一,它没有那么极端的对比度: https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-category20

      如果这些都不适合,您可以使用自己的缩放功能

      var colorScale = d3.scale.ordinal().range([/*array of hex values */]);
      
      pie.colors(colorScale);
      

      您可以自己创建数组或使用colorBrewer 函数之一。

      如果您想为特定值指定特定颜色(而不仅仅是按照它们出现的顺序将颜色分配给值),您需要 (a) 将比例域指定为与范围数组的顺序,以及 (b) 创建一个辅助函数,从您的数据中传入正确的属性:

      var colorScale = d3.scale.ordinal().domain(["banana", "cherry", "blueberry"])
                                         .range(["#eeff00", "#ff0022", "#2200ff"]);
      
      pie.colors(function(d){ return colorScale(d.fruitType); });
      

      【讨论】:

      • P.S.我应该澄清一下,colorBrewer 函数不是 d3 内置的:它们必须作为separate javascript file 包含在内。对于静态示例,最简单的方法是使用她的网站找出十六进制值,然后将它们作为数组写入代码。
      • pie.colors(function(fruitType){ return colorScale(fruitType); }); — 我最好运气好。
      • @DavidRR 如果您的数据仅包含域中使用的相同值,则根本不需要辅助函数。只需使用pie.colors(colorScale)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      相关资源
      最近更新 更多