d3.js带有标签的动态数据
d3.js dynamic data with labels
我成功地实现了以下功能(饼图根据滑块值动态变化):
var x = function() {
return $("#slider").val();
}
var data = function() {
return [x(), ((100-x())/2), ((100-x())/2)];
}
var w = 100,
h = 100,
r = 50,
color = d3.scale.category20(),
pie = d3.layout.pie().sort(null),
arc = d3.svg.arc().outerRadius(r);
var svg = d3.select("#chart").append("svg:svg")
.attr("width", w)
.attr("height", h)
.append("svg:g")
.attr("transform", "translate(" + w / 2 + "," + h / 2 + ")");
var arcs = svg.selectAll("path")
.data(pie(data()))
.enter().append("svg:path")
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { this._current = d; });
var redraw = function() {
newdata = data(); // swap the data
arcs = arcs.data(pie(newdata)); // recompute the angles and rebind the data
arcs.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
};
// Store the currently-displayed angles in this._current.
// Then, interpolate from this._current to the new angles.
function arcTween(a) {
var i = d3.interpolate(this._current, a);
this._current = i(0);
return function(t) {
return arc(i(t));
};
}
我似乎无法修改它以包含动态标签(使用对象作为数据,而不是数组{‘label’:‘label1’,‘value’:value}。我该如何修改上面的代码以添加标签?
这应该可以工作,将标签和饼图作为单独的实体:
var x = function() {
return $("#slider").val();
}
var data = function() {
return [x(), ((100-x())/2), ((100-x())/2)];
}
var labels = function() {
var label1 = "LABEL 1: " + x();
var label2 = "LABEL 2: " + ((100-x())/2);
var label3 = "LABEL 3: " + ((100-x())/2);
return [label1, label2, label3];
}
var w = 200,
h = 100,
r = 50,
color = d3.scale.category20(),
pie = d3.layout.pie().sort(null),
arc = d3.svg.arc().outerRadius(r);
var svg = d3.select("#chart").append("svg:svg")
.attr("width", w)
.attr("height", h)
.append("svg:g")
.attr("transform", "translate(" + 50 + "," + h / 2 + ")");
var arcs = svg.selectAll("path")
.data(pie(data()))
.enter().append("svg:path")
.attr("fill", function(d, i) { return color(i); })
.attr("d", arc)
.each(function(d) { this._current = d; });
var label_group = svg.selectAll("text")
.data(labels())
.enter()
.append("text")
.text(function(d) {
return d;
})
.attr("x", 60)
.attr("y", function(d, i) { return (i * 20) - 16; });
var redraw = function() {
newdata = data(); // swap the data
arcs = arcs.data(pie(newdata)); // recompute the angles and rebind the data
arcs.transition().duration(750).attrTween("d", arcTween); // redraw the arcs
label_group = label_group.data(labels());
label_group.transition().delay(300).text(function(d) {
return d;
});
相关文章:
- 如何在没有ajax的情况下将javascript动态数据发送到php变量
- 从要使用Protractor测试的服务器异步加载的动态数据列表的列表
- 不适用于动态数据的Angular指令来自$http
- 如何在字符串中的值之前删除字符串中的动态数据?/ 使用 Lodash 的 _.trimStart 与动态数据
- 剑道数据源,将动态数据发送到服务器
- 无限滚动,动态数据按上次修改状态排序
- 如何在高图表中设置动态数据
- 使用Select2和Meteor.js进行动态数据采集
- 谷歌图表与动态数据和分页是可能的
- 使用AngularJs在自定义TinyMCE编辑器中添加动态数据
- 如何为jQuery帖子输入动态数据参数
- 将不同的符号添加到具有动态数据的高图表中
- Aurelia@儿童动态数据
- 从动态数据生成AngularJS UI模板
- 我可以将初始动态数据从基于RESTful api的服务器端传递到基于角度的前端页面吗
- d3.js带有标签的动态数据
- 将sessionStorage(JSON)中的动态数据附加到Listview中
- 如何使用Javascript在html源中添加动态数据
- 试图在网站上抓取谷歌地图api生成的动态数据,但正常抓取返回空白
- 从angularjs中的$scope在$http.post中发送动态数据