d3 如何创建不同颜色的堆栈图

发布于 2022-09-07 15:44:13 字数 359 浏览 18 评论 0

想要的效果是这样的:

图片描述

使用d3的堆栈柱状图(stacked bar chart)来实现,但是得到的结果却是:

图片描述

两个不同柱的颜色是一样的,代码可以看这里。问题就是,我要怎样才能创建出我想要的那种,每个柱的颜色不同的柱状图 ? 谢谢啦~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

浅听莫相离 2022-09-14 15:44:13
.attr("fill", function(d){ return d.y > 6 ? "#FF0033" : "#666666"});

来自:https://stackoverflow.com/que...

李不 2022-09-14 15:44:13

确实如 @Randal 所说的思路,使用一个一个函数来生成fill的值,比如上面的例子,我们作如下修改,就可以实现不同柱不同颜色了:

var layer = svg.selectAll(".stack")
            .data(dataStackLayout)
            .enter().append("g")
            .attr("class", "stack")
            
            // 注释掉下面代码
            /* .style("fill", function (d, i) {
                return color(i);
            }); */

    layer.selectAll("rect")
            .data(function (d) {
                return d;
            })
            .enter().append("rect")
            .attr("x", function (d) {
                return x(d.x);
            })
            .attr("y", function (d) {
                return y(d.y + d.y0);
            })
            .attr("height", function (d) {
                return y(d.y0) - y(d.y + d.y0);
            })
            .attr("width", x.rangeBand())
            
            // 增加下面代码
            .style("fill", function (d, i, j) {  // 三个参数分别是:d 数据,i 当前rect的序号,j 当前rect 的父元素的序号
               return color((j * 2) + i);
            });
           
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文