【问题标题】:How to dynamically set pie piece text colour on a C3 chart如何在 C3 图表上动态设置饼图文本颜色
【发布时间】:2017-03-22 13:03:05
【问题描述】:

我有一个类似于this 在线示例的C3 饼图。就我而言,我根据传入的外部数据设置 data.colors 。

我的设置如下所示(我传入要使用的颜色)...

        this.pieChart = generate({
            data: {
              columns: columns,
              colors: colours,
              type: 'pie',
              onclick: (e) => {
                this.handlePieClick(e.id);
              },
            },
            bindto: '#pie-chart',
            tooltip: {
              show: false
            },
            transition: {
              duration: 1000
            },
            legend: {
              item: {
                onclick: id => {
                  this.handlePieClick(id);
                }
              }
            },
          });

我的应用无法控制这些颜色。当颜色较浅时,很难看到白色文字。我可能混合了浅色和深色。我需要做的是检查每种颜色,然后能够为每个饼图的文本颜色设置白色或黑色的文本,但是我看不到我可以覆盖的回调函数来执行此操作。

有谁知道这样做的方法吗?最重要的是我无法控制输入的颜色,一旦我有了颜色数据,就需要在代码中设置文本颜色。

提前感谢您的帮助!

【问题讨论】:

  • 你能为你的代码创建jsfiddle吗?
  • 这可以通过 css 实现,在您的示例中,您希望拥有像 .c3-chart-arc text{ fill: black;} 这样的东西,更多类可以在 reference(底部)中找到。您始终可以通过浏览器中的开发工具检查您的图表。在最坏的情况下,您必须在 d3 内直接操作图表。

标签: javascript c3.js


【解决方案1】:

在 c3 配置中使用onrendered: 选项

在那里,循环遍历颜色,并为每个

  1. 构造一种新的颜色来显示饼图的颜色

  2. 使用类定义将其应用于右段中的文本(因为颜色图和饼图段元素类都包含数据系列的名称)

http://jsfiddle.net/shxLfss3/2/

onrendered: function () {
    var colEntries = d3.entries(this.config.data_colors);
    colEntries.forEach (function (colEntry) {
        // get pie segment colour, make a contrasting colour from it
        var hsl = d3.hsl(colEntry.value);
        hsl.l = hsl.l > 0.5 ? 0 : 1;    // make black if light, white if dark
        var newCol = hsl.toString();
        // apply that color to the segmenbt's text
        var segment = d3.select(this.config.bindto+" .c3-chart-arc.c3-target-"+colEntry.key);
        segment.select("text").style("fill", newCol);
    }, this);
}

【讨论】:

  • 太棒了,它做到了。出于某种原因,hsl.l = hsl.l > 0.5 ? 0 : 1; 似乎从未返回黑色(但在您的示例中确实如此)!。但这很好,我只是将colEntry.value 传递给我自己现有的颜色对比函数,并且效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-28
  • 1970-01-01
相关资源
最近更新 更多