【发布时间】:2015-09-15 23:06:07
【问题描述】:
我正在使用 d3 使用以这种方式格式化的数据数组来显示水平条形图
data = [{ value: 167, key: 'myKey' }, ...]
为了测试,我使用了一个包含 6 个元素的数组,其中最后 4 个元素具有相同的值。 d3 只显示 3 个柱,因为最后四个元素的值相同,因此计为 1。 我阅读了以下讨论 Wrong usage of d3 scale with same values in data? 但我使用了相同的代码
y = d3.scale.ordinal()
.domain(d3.range(data.length)) // data.length = 6
.rangeRoundBands([0, height], .1);
为了显示条形图,我创建了一个g(组元素)并在其上附加了一个rect 和一个text 元素。
<g class="bar-container" pointer-events="all" transform="translate(0,4)">
<rect class="bar" x="0" y="0" width="380" height="30"></rect>
<text pointer-events="none" x="5" y="18">key</text>
</g>
update-enter-exit 模式的 JS 代码是
var barsGroup = svg.selectAll('g.bar-container')
.data(data, function(d) { return d.value; });
var bar = barsGroup.enter()
.append('g')
.attr('class', 'bar-container')
.attr('pointer-events', 'all')
bar.attr("transform", function(d, i) { return "translate(0," + y(i) + ")"; });
// Add rectangle and text
bar.append("rect") ...
bar.append('text') ...
图表内只有 3 个 g 对象,而不是 6 个。没有隐藏任何内容,因此没有按我的预期创建另外 3 个柱。
【问题讨论】:
标签: javascript d3.js svg