D3.js:如何访问SVG组元素(堆叠条形图)的填充属性
d3.js : how to access fill attribute of svg group element (stacked bar chart)
newbie d3.js在这里,我试图理解使用d3.stack()
的堆叠柱状图样本(注:不是d3.layout.stack()
)从样本链接:http://bl.ocks.org/mbostock/3886208(由Mike Bostock)
我试图访问每个svg组元素的填充属性,每个元素都代表一个单一的"层"/年龄组。为此,我在"enter"部分做了一些修改:
var seriesG = g.selectAll(".serie")
.data(function(){return stackedColumns;})
.enter().append("g")
.attr("class", "serie")
.attr("fill", function(d) {return z(d.key); });
由于console.log(seriesG);
导致zi {_groups: Array[1], _parents: Array[1]}
,因此我认为在_groups
成员对象中可以访问代表七个年龄范围组的七个svg组元素。
现在,我可以通过这个基本递归例程访问每个svg组元素:
seriesG._groups.forEach(function(d, i){
console.log(d);
});
在浏览器元素检查器控制台(opera)中显示[g, g, g, g, g, g, g]
。我想弄清楚的是正确的语法来访问'd'数据的填充属性。因为通过观察浏览器控制台,我知道'fill'是'd'数据的'outerHTML'
成员属性的成员,首先我必须知道如何访问这个'outerHTML'属性。我已经尝试了各种语法:-
console.log(d.attr("outerHTML"));
-
console.log(d.attr.outerHTML);
-
console.log(d.outerHTML);
-
console.log(d["outerHTML"]);
前两次尝试的结果是Uncaught TypeError: d.attr is not a function
,而剩下的两次是undefined
操作。
所以,在我的问题的简短版本是:"访问使用d3.stack()
创建的每个svg组元素的填充的正确语法是什么?"
我的最终目标是添加各种类似于这个示例链接的功能:http://bl.ocks.org/KatiRG/f7d064cd9c3efbc3c360
首先,不要使用_groups
。这意味着选择对象的私有。您应该使用。nodes方法。
第二,我的问题是你想如何处理这些填充?
你要写的代码是这样的:
seriesG.nodes().forEach(function(d){
console.log(d3.select(d).attr('fill'));
});
但是,根据目的,既然你知道你的键(在例子中你链接到这些是"65年及以上","45至64年"等),那么任何"键"的填充值可以简单地返回为:
z("65 Years and Over");
您可以使用.getAttribute()
这样:element.getAttribute('fill')
更多信息在这里:https://developer.mozilla.org/fr/docs/Web/API/Element/getAttribute
- 用chart.js绘制条形图
- d3.js用按钮更新条形图工具提示
- 添加新数据时D3.JS条形图列偏移量
- Chart.js条形图:网格颜色和隐藏标签
- 在条形图中呈现数据AngularJS,如何制作一个好的多条形图
- Chart.js 2.1.2条形图动画问题
- 如何在Extjs5中更改条形图的标签
- d3.js条形图转换无法正常工作
- 从数组在d3中创建条形图时出现问题
- 条形图元素的HTML5 JavaScript锚点
- d3.js组条形图不起作用
- 图表.js:条形图点击事件
- 如何使用chartjs设置条形图中每个条形图的颜色
- Raphael.js条形图及教程
- 对d3堆叠条形图的数据进行排序
- 更新分组条形图(转换或删除元素组)
- 更新时未从 D3 条形图中删除旧元素
- 根据 c3 条形图中的坐标对齐外部元素
- 更新 D3 条形图时调用 svg 元素的宽度的问题
- D3.js:如何访问SVG组元素(堆叠条形图)的填充属性