将数据从父选择传播到子选择(D3)
Propagate Data from Parent to Child Selection (D3)
我有一个对象,data
,我想用它创建一个选区。
var data = [
{
range: 30,
color: 'blue',
},
{
range: 50,
color: 'red'
}
];
所以我输入
var group = chart.selectAll('g')
.data(data)
.enter().append('g');
现在我想添加一些circle
元素等于data['range']
。
var circle = group.selectAll('circle')
.data(function(d) { return d3.extent(d.range); })
.enter().append('circle');
所以这是我的问题,什么是能够从它的子父选择访问数据的最佳实践。例如,我想访问circle
的几个属性中的data['color']
。
each()
,然后递归地将属性应用于circle
元素
var circle = group.selectAll('circle')
.data(function(d) { return d3.range(d.range); })
.enter().append('circle');
circle.each(function(d) {
var parentData = this.parentNode.__data__;
d3.select(this).attr('fill', function() { return parentData.color; });
});
是否有一个更有效的实践绑定到父数据,一个不需要使用each()
和通过this.parentNode.__data__
访问父数据?
一般来说,我想最简单的方法是创建一个包含范围值和颜色的对象。
例如:var circle = group.selectAll('circle')
.data(function(d) {
return d3.range(d.range).map(function (rangeValue) {
// returns an item that combines range value and color from parent data
return {
range: rangeValue,
color: d.color
};
});
})
.enter()
.append('circle')
.attr('r', function (d) { return d.range; })
.attr('fill', function (d) { return d.color; });
相关文章:
- d3基于用户选择动态更新节点
- jQuery的等价物's'不是'D3.js中的选择器
- D3选择html——传递函数时,索引从1开始,而不是从0开始
- D3:从不同的图表中选择特定的节点
- 使用 D3 选择圆的子集
- 从 d3.js 中的树中选择节点的子节点
- 在 Javascript 或 D3 中选择多个属性
- d3.选择不追加
- 通过在d3中单击来选择/取消选择
- d3在鼠标悬停上过滤数据之后从选择中提取值
- 需要D3中条形图上关于年份和犯罪人数变量选择的帮助
- d3.按属性值选择
- 如何在d3中对形状选择进行排序
- 如何从数据中选择d3.js中的唯一值
- 按属性选择d3.js数据元素
- 自动或随机散点图矩阵选择d3.js
- 选择d3图表的一部分
- 将数据从父选择传播到子选择(D3)
- 在(this)之后选择d3中的元素
- 根据其基准选择d3节点