d3.js组条形图不起作用
d3.js group bar chart not working
这是我的工作jsfiddlehttps://jsfiddle.net/dibyendu/wn6awvbe/。现在这个条形图适用于single value
,我的要求是使它成为group bar chart
。
因此,作为第一步,我必须基于所有值的min
和max
创建x轴范围。我能够成功地做到这一点。
其次,我尝试创建一个group
,并将单个group bars
添加到group
中。这部分我无法破解。
这是我的代码我已经尝试
var combos = svg.selectAll("g").data(data)
.enter()
.append("g")
.attr({width: 2 * width})
.attr('height',y.rangeBand()+10)
;
combos.selectAll(".bar1")
.append("rect")
.attr("class", function(d) { return "bar bar--" + (d.value < 0 ? "negative" : "positive"); })
.attr("x", function(d) { return x(Math.min(0, d.value)); })
.attr("y", function(d) { return y(d.name); })
.attr("width", function(d) { return Math.abs(x(d.value) - x(0)); })
.attr("height", y.rangeBand());
combos.selectAll(".bar2")
.append("rect")
.attr("class", function(d) { return "bar bar--" + (d.value < 0 ? "negative" : "positive"); })
.attr("x", function(d) { return x(Math.min(0, d.value1)); })
.attr("y", function(d) { return y(d.name); })
.attr("width", function(d) { return Math.abs(x(d.value1) - x(0)); })
.attr("height", y.rangeBand());
但由于某种原因,它不起作用。我在这里犯了什么错误。感谢您提前提供的帮助。
如果你总是保证每组有2个酒吧,快速解决方法是:
combos
.append("rect")
.attr("class", function(d) { return "ba ba--" + (d.value < 0 ? "negative" : "positive"); })
.attr("x", function(d) { return x(Math.min(0, d.value)); })
.attr("y", function(d) { return y(d.name); })
.attr("width", function(d) { return Math.abs(x(d.value) - x(0)); })
.attr("height", y.rangeBand() / 2); //<-- cut height in half
combos
.append("rect")
.attr("class", function(d) { return "bar bar--" + (d.value < 0 ? "negative" : "positive"); })
.attr("x", function(d) { return x(Math.min(0, d.value1)); })
.attr("y", function(d) { return y(d.name) + (y.rangeBand() / 2); }) //<-- offset if from other bar
.attr("width", function(d) { return Math.abs(x(d.value1) - x(0)); })
.attr("height", y.rangeBand() / 2); //<-- cut height in 2
更新的小提琴。
评论编辑
如果你想有一个动态的酒吧数量,你真的需要改变你的输入数据。value1:, value2:
等是不可行的。快速重构可能使用一组值:
{
"name": "M1",
"value": [-45, -13, -10, -8]
},
...
有了这种格式,你可以使用子选择,并真正开始获得一些动态代码:
var combos = svg.selectAll("g").data(data)
.enter()
.append("g");
combos
.selectAll("rect")
.data(function(d){
return d.value.map(function(d1){
return {
value: d1,
name: d.name,
total: d.value.length,
};
})
})
.enter()
.append("rect")
.attr("class", function(d) { return "ba bar--" + (d.value < 0 ? "negative" : "positive"); })
.attr("x", function(d) { return x(Math.min(0, d.value)); })
.attr("y", function(d,i) { return (y(d.name) + (y.rangeBand() / d.total * i)) ; })
.attr("width", function(d) { return Math.abs(x(d.value) - x(0)); })
.attr("height", function(d){
return y.rangeBand() / d.total
});
新更新的小提琴。
相关文章:
- d3.js组条形图不起作用
- 为什么d3.js饼图转换不起作用
- jQuery Animate 在创建图库滑块时不起作用
- 图层删除(图像);在 Kinetic.js 中不起作用
- D3js 饼图单击事件不起作用
- 直接从代码笔复制的圆环图代码不起作用
- D3中的排序条形图不起作用
- 谷歌运动图不起作用
- 鼠标点击在我的html5柱状图中不起作用
- onclick() jQuery/JavaScript 显示饼图的按钮不起作用
- d3js散点图自动更新不起作用
- 高位图向下钻取不起作用
- 堆积条形图到分组条形图过渡不起作用
- 通过 json 更新的 Canvasjs 柱形图不起作用
- 工具提示不起作用谷歌饼图
- 无法加载高图.js和高图.js(地图.js不起作用)
- D3 条形图示例在本地不起作用
- D3js响应堆叠条形图-其他主题解决方案不起作用
- 堆叠条形图's悬停不起作用
- D3 堆积条形图在支流中有效,但在其他地方不起作用