d3.js - D3 - 2 种不同的酒吧填充物
问题描述
我在这里有一个 plunker - https://plnkr.co/edit/avVtvdm8Q8tnClAqYxlH?p=preview
它是一个条形图,在 x 轴的每个点上显示两个不同的数据点。
条形在 xscale 中具有相同的填充设置
var x = d3.scaleBand()
.range([0, width])
.padding(.33)
.domain(data.map(function(d) {
return d.phase
}));
我希望绿色条有更多的填充,所以在红色条内
如何在绿条上设置不同的填充。
解决方案
以下是我可以立即想到的两种不同方法:
设置偏移量以定义内部条形宽度应比外部条形宽度小多少,并相应地调整条形。
var offset = 10; chart.selectAll(".bar").attr("x", (d, i) => { return i%2 ? x(d.phase)+offset/2 : x(d.phase) }) .attr("y", (d, i) => { return y(d.finish); }) .attr("width", (d,i) => { return i%2 ? x.bandwidth()-offset : x.bandwidth(); })
Plunkr: https ://plnkr.co/edit/2ZSKGmjj3ntJEA3KGq9e?p=preview
为绿色条设置不同的比例(我更喜欢这种方法):
var x1 = d3.scaleBand() .range([0, width]) .padding(.56) .domain(data.map(function(d) { return d.phase }));
相应地,更改栏属性:
chart.selectAll(".bar") .attr("x", (d, i) => { return i % 2 ? x(d.phase)+(Math.abs(x1.bandwidth()-x.bandwidth())/2) : x(d.phase) }) .attr("y", (d, i) => { return y(d.finish); }) .attr("width", (d, i) => { return i % 2 ? x1.bandwidth() : x.bandwidth() })
这里棘手的部分是设置内部条形偏移,但您可以清楚地看到那里的逻辑: Difference between the bandwidth of the scales/2
Plunkr:https ://plnkr.co/edit/X5vFB99JBHkfGvSIfXAo?p=preview
希望这可以帮助。
推荐阅读
- vba - Office 2016 ActiveX组件下VBA代码调整无法创建对象VBA
- ubuntu - 运行更新&&升级时出现Dockerfile错误
- angular - 在生产模式下构建时找不到管道
- angular - 从 5.0 到 6.0 的 Angular 更新指南
- java - 如何实现Robot框架在两台不同机器上并行测试执行?
- javascript - 使用 Microsoft Api Graph [NodeJS] 从 OneDrive 获取最近的文档
- android - 无法使用 DialogFragment 调用 MainActivity.super.onBackPressed()
- javascript - 从json feed Angular 4中的表中检索数据
- node.js - 依次执行 node.js 代码
- jquery - jQuery 显示/隐藏在 for 循环中不起作用