1

我可以有一个条形图,限制条形图,例如 gRaphael 饼图只接受 10 个扇区,其余的为“其他”,不到总数的 10%。同样的方式,gRaphael 条形图只有 10 个条形,剩下的到“其他”?

谢谢, Mythyili

4

1 回答 1

1

这目前不是 g.bar 类中的选项,因此您可能必须更新源代码才能实现此目的。

在查看了他们对 g.pie.js 中的“其他”部分做了什么之后,我会推荐以下内容:

  • 向属性数组添加一个选项,称为“maxbars”。当您传入此选项时,这将是图表上显示的最大柱数。如果 maxbars = 10 并且有超过 10 个段,则 1 到 9 将是唯一的,而 10 将是第 10 个到末尾的组合。
  • 由于他们处理值数组的方式,我认为最好的解决方案是在第一次访问该值数组之前覆盖它。在 vbarchart 和 hbarchart 中,在图表元素初始化之后,您应该添加一个看起来像这样的 for 循环:

    if (values.length > opts.maxbars) {
        for (var i = maxbars; i < values.length; i++) {
            values[maxbars-1] += values[i];
            values[i] = null;
        }
    }
    

    这是将第 10 个(例如)元素之后的所有值添加到第 10 个元素并清除数组中的剩余插槽。现在您拥有的是一个包含 10 个元素的数组,其中第 10 个是第 10 个以上元素的总和。请注意,在这个简单的循环中,我只考虑了每个值都不是数组的情况。您需要检查 values[i][j] 并添加这些元素而不是 values[i],这可能需要嵌套的 for 循环或三元运算符。查看 g.bar 的其余部分,看看其他地方是如何处理的。

  • 在他们绘制标签的代码部分中,您可能希望在循环中添加一个检查,例如 if (opts.maxbars && (i == opts.maxbars - 1)) { // 用“OTHER”标记栏}

抱歉,我没有任何实际的工作代码来实现这一点,但它会涉及更多,并且需要一些试验和错误。希望这能为您指明正确的方向。

于 2012-10-19T02:39:22.700 回答