javascript - c3 (v4) 条形图中的重叠条

标签 javascript html d3.js bar-chart c3.js

我想引用一下之前的问题:

stacked bar chart with overlapping bars C3js

但是,我唯一的问题是我想重叠列以显示(作为示例)4 名学生中有 3 名通过了该科目。现在我有一个高度为 3 的条形图,顶部有一个高度为 4 的条形图,这使它成为 7,我想要一个 4 条形图和一个 3 条形重叠的条形图。如何更改我的代码?谢谢:

        <div id="chart3"></div>
        <script>
            var chart = c3.generate({
                bindto: '#chart3',
                data: {
                    url: '../static/CSV/Chart_data/number_students.csv,
                    x:'AC_YEAR',
                    type: 'bar',
                    groups: [
                        ['Total women', 'Passed women'],
                        ['Total men', 'Passed men']
                    ],
                },
                axis: {
                    y: {
                        label: {
                            text:"Number of students",
                            position: "outer-middle"
                        },
                    },
                    x: {
                        label: {
                            text:"Year",
                            position: "outer-center"
                        },
                    }
                },
                size: {
                    height: 400,
                    width: 800
                },
                bar:{
                    width:{ratio:0.7}
                },
                legend: {
                        show: true,
                        position: 'inset',
                        inset: {
                            anchor: 'top-right',
                            x: 10,
                            y: 5,
                            step: 2
                        }
                    }        
            }); 
        </script>

csv 文件 number_students 是:

AC_YEAR,Passed women,Passed men,Total women,Total men
2010,72,239,98,315
2011,77,227,83,276
2012,65,226,93,298
2013,54,215,77,283
2014,63,233,88,294
2015,49,205,64,267

当前的看起来像这样:

Without overlapping bars

而我想要的应该重叠,这样,例如在 2010 年,我们只能看到一点绿色(没有通过的 7 个女学生),因为前面的蓝色只比绿色少 7 个单位.而右边29个单位的红色(没及格的男同学)。

最佳答案

我以前从未使用过c3,所以我不知道c3 中是否有任何图表可以特别做到这一点。我能够使用 d3 解决这个问题。

首先 c3 出于某种原因使用 path 而不是 rects 否则会更改 bars 的 width本来可以更容易。

我首先使用 d3.select(**bars**).node().getBBox() 和然后调整 ywidth Total womenTotal men bars according to y Passed womenPassed men 的属性,因为我们想重叠它们。

然后隐藏由 c3 创建的所有 path 元素,然后将所有这些包装在用户调整浏览器窗口大小时调用的函数中。

这是完整的 fiddleplunkr

关于javascript - c3 (v4) 条形图中的重叠条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50266995/

相关文章:

javascript - Canvas js : how to remove a datapoint dynamically but without creating a "hole" in chart?

javascript - 将 bool 值设置为 false 以停止 event.preventDefault

javascript - 如果是则返回确认调用函数

html - 向右浮动 CSS 问题

javascript - 每次迭代后更新数组

javascript - 对象中的最高值,用键显示,javascript

javascript - 神秘的一行,用于在Webpack : templates. keys().forEach(templates)中要求html模板?

jquery - DIV覆盖YouTube嵌入代码

javascript - 如何计算 d3.js 卫星投影的投影旋转和网格扩展

cygwin - 在Windows(Cygwin)上构建d3.js- 'npm install'路径问题的好解决方法?