我正在尝试构建此组图表的折线图 - 使用图例切换。我不确定我的动画是否正确 - 并希望在结构方面基本上使图表成为姐妹。
//组图表 http://jsfiddle.net/0ht35rpb/259/
//折线图 http://jsfiddle.net/0ht35rpb/262/
g.append("g")
.selectAll("g")
.data(data)
.enter().append("g")
.attr("class", "bar")
.attr("transform", function(d) {
return "translate(" + x0(d.State) + ",0)";
})
.selectAll("rect")
.data(function(d) {
return keys.map(function(key) {
return { key: key, value: d[key]};
});
})
.enter().append("rect")
.attr("x", function(d) {
return x1(d.key);
})
.attr("y", function(d) {
return y(d.value);
})
.attr("width", x1.bandwidth())
.attr("height", function(d) {
return height - y(d.value);
})
.attr("fill", function(d, i) {
return z(d.key);
});
- 所以第一行看起来像这样 - 但我认为我缺少enter()部分
// define the line
var valueline = d3.line()
.curve(d3.curveBasis)
.x(function(d) {
return x(parseTime(d.date));
})
.y(function(d) {
return y(d.temperature);
});
g.selectAll(".city")
.data(cities)
.enter().append("g")
.attr("class", "city")
.append("path")
.attr("class", "line")
.attr("d", function(d){
return valueline(d.values);
})
.style("stroke", function(d) {
return z(d.id);
});
当涉及到翻译图例时,如何修复折线图以使线条动画化 - 并修复域名 - 因为现在是一个时间刻度。另外参考两个图表 - 我应该放置"制作条形图" "制作线条"上面看到的代码 - 进入实际函数 - 在更新函数方法中重用 - 对于每个图表?
答案 0 :(得分:1)
这里有fiddle根据您的要求制作动画。
相关代码:
y.domain([
d3.min(cities, function(c) {
if(filtered.indexOf(c.id) === -1) {
return d3.min(c.values, function(d) {
return d.temperature;
});
}
}),
d3.max(cities, function(c) {
if(filtered.indexOf(c.id) === -1) {
return d3.max(c.values, function(d) {
return d.temperature;
});
}
})
]);
g.select(".axis.axis--y").transition().duration(500)
.call(d3.axisLeft(y));
g.selectAll('.city path').transition().duration(500).attr('d', function(d) {
if(filtered.indexOf(d.id) > -1) {
return null;
} else {
return valueline(d.values);
}
});
你的代码遗漏了很多东西:
var paths = svg.selectAll(".line").selectAll("path")
不是你想要的,因为你有班级" line"对于路径本身。相关版本为:svg.selectAll("path.line")
g.selectAll('.city path').transition().duration(500) .attr('d', function(d) { if(filtered.indexOf(d.id) > -1) { return null; } else { return valueline(d.values); } });
希望这会有所帮助。 :)