[英]How to set multiple attributes with one value function?
給定包含多個數據元素(如對象或數組)的數據,是否可以使用單個值函數在選擇上設置多個屬性?
例如:
var data = [{ 'x': 10, 'y': 20, 'r': 5 }];
d3.select('body').append('svg').selectAll('circle')
.data(data)
.enter().append('circle')
.attr('cx cy r', function (d) {
return [d.x, d.y, d.r];
});
代替:
var data = [{ 'x': 10, 'y': 20, 'r': 5 }];
d3.select('body').append('svg').selectAll('circle')
.data(data)
.enter().append('circle')
.attr('cx', function (d) {
return d.x;
});
.attr('cy', function (d) {
return d.y;
});
.attr('r', function (d) {
return d.r;
});
更新 (2016年7月8日)此答案適用於d3 v3.x - NOT v4.x. 對於后一版本,請參閱Tim Hayes的回答 ,也在此頁面上。 或者......在下面的答案中,只需將attr
與attrs
交換,並且不要忘記要求/ import / script-embed d3-selection-multi
。 並且...不要錯過使用.each
,這可能對您有用。
是的,通過傳入散列(如jQuery的css()
方法)是可能的:
d3.select('body').append('svg').selectAll('circle')
.data(data)
.enter().append('circle')
.attr({
cx: function (d) { return d.x; },
cy: function (d) { return d.y; },
r: function (d) { return d.r; }
});
這適用於style()
。
如果重復發生的function (d) {}
開始感覺太多,這是另一種方法:
d3.select('body').append('svg').selectAll('circle')
.data(data)
.enter().append('circle')
.each(function (d) {
d3.select(this).attr({
cx: d.x,
cy: d.y,
r: d.r
});
})
注意:此功能僅存在於d3.js v2.10.0或更高版本中
這是一個老帖子,但我在谷歌搜索時找到答案。 接受的答案在D3 v4.0中不再有效。
繼續前進,您可以使用attrs()
方法執行相同的操作。 但只有在加載可選的d3-selection-multi腳本時才支持attrs()
。
所以使用上面的例子,它在D3 v4.0中看起來像這樣:
// load d3-selection-multi as separate script
<script src="https://d3js.org/d3-selection-multi.v0.4.min.js"></script>
d3.select('body').append('svg').selectAll('circle')
.data(data)
.enter().append('circle')
.attrs({
cx: function (d) { return d.x; },
cy: function (d) { return d.y; },
r: function (d) { return d.r; }
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.