【问题标题】:Overlapping bars in c3 (v4) bar chartc3 (v4) 条形图中的重叠条形图
【发布时间】:2018-10-20 09:01:22
【问题描述】:

我想参考上一个问题:

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

当前是这样的:

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

【问题讨论】:

  • 你能告诉我们你的图表应该是什么样子吗?
  • 感谢@AdityaK 看到上面的编辑问题
  • 解决方案使用d3可以吗?
  • 是的,@AdityaK 没问题,但我对它不是很熟悉,所以如果你能准确说明你将如何修改我以前的代码,那将有很大帮助!提前致谢

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


【解决方案1】:

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

首先c3 使用path 代替rects 用于条形,否则更改条形的width 可能会更容易。

我所做的是首先使用d3.select(**bars**).node().getBBox()将所有四个类别的条形的所有维度存储到四个不同的数组中,然后根据@调整Total womenTotal men条形的ywidth Passed womenPassed men 的 987654336@ 属性,因为我们想将它们重叠。

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

这是完整的fiddleplunkr

【讨论】:

  • 感谢@AdityaK,太棒了!但我不知道为什么我的 csv 不起作用...我想用 csv 创建它,因为我将修改它...你能告诉我如何用 csv 来做吗?很抱歉打扰您!而且,来自 JS 的 cmets,我必须将它们作为代码吗?谢谢!
  • 我认为我的问题是在使用 url 收取数据时,未分配键,因此该功能无法正常工作。但是,如果数据来自 csv,我该如何分配键?
  • 带有问题上显示的 csv 文件(我将对其进行修改,因此我无法直接插入数据)。我可以上传它,以便您使用该文件运行代码并自己尝试! @AdityaK
  • @MTT 尝试从您共享的保管箱链接中读取 csv,但失败了。我添加了一个 plunkr(检查更新的答案),它正在使用 Papa 解析库读取 csv。
猜你喜欢
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 2015-01-13
  • 1970-01-01
  • 2023-01-21
  • 2020-03-06
相关资源
最近更新 更多