你可以试试crossfilter之类的东西
http://square.github.io/crossfilter/
更新
这个想法是当您点击主图表(条形图)时更新饼图。
假设您的数据如下所示:
var ds = [
{ key: 'A', values: [1,2,3,4], sum: function () { return d3.sum(this.values); } },
{ key: 'B', values: [20, 30, 40], sum: function () { return d3.sum(this.values); } },
{ key: 'C', values: [100, 200, 300], sum: function () { return d3.sum(this.values); } }
];
你有一个创建/更新馅饼的功能,比如:
function updatePie(svg, data, radius) {
var color = d3.scale.category20c();
var arc = d3.svg.arc().outerRadius(radius);
var formattedData = d3.layout.pie()(data);
var slice = svg.selectAll('.slice')
.data(formattedData);
slice.enter()
.append('path')
.attr('fill', function(d, i) { return color(i); })
.attr('class', 'slice')
.attr('d', arc);
slice
.attr('d', arc);
slice.exit()
.remove();
}
现在在你的条形图的点击处理程序上
var clickHandler = function (dataPoint) {
updatePie(svg, dataPoint.values, r);
};
这是一个仅使用主列表的工作示例(替换条形图),但想法是相同的:
http://jsfiddle.net/jaimedp/q45z6/1/
希望对你有帮助