Javascript 基于数据的动态图例

Javascript 基于数据的动态图例,javascript,d3.js,Javascript,D3.js,我已经在D3可视化中设置了一个图例,该图例目前包括所有可能的“车辆”及其颜色标识 我这样设置颜色: var color = d3.scale.ordinal() .domain(['bike', 'motorcycle', 'car', 'van', 'truck']) .range(['#00986F', '#41A5D1', '#695998', '#E2595B', '#AA595B']); …我是这样使用这个比例的: var vehiclesLegend = vehiclesL

我已经在D3可视化中设置了一个图例,该图例目前包括所有可能的“车辆”及其颜色标识

我这样设置颜色:

var color = d3.scale.ordinal()
  .domain(['bike', 'motorcycle', 'car', 'van', 'truck'])
  .range(['#00986F', '#41A5D1', '#695998', '#E2595B', '#AA595B']);
…我是这样使用这个比例的:

var vehiclesLegend = vehiclesLegendWrapper.selectAll('.vehiclesLegendSquare')
  .data(color.range())
  .enter().append('g')
  .attr('class', 'vehiclesLegendSquare')...
问题是并非所有数据集都包含所有可能的车辆,因此我的图例仍将显示“卡车”,例如,即使数据中没有卡车


有没有一种简单的方法可以根据数据集从图例中排除某些车辆/颜色组合?

有很多方法可以解决这个问题。我只想在域中使用一个:

var vehiclesLegend = vehiclesLegendWrapper.selectAll('.vehiclesLegendSquare')
  .data(color.domain()) //<-- going to use domain instead
  .enter().append('g')
  .filter(function(d){
     return (d in dataset); //<-- d would be 'truck', 'car', etc.. (pseduo-code, fix for your real dataset)
  })
  .attr('class', 'vehiclesLegendSquare')
  ...
  .style('fill', function(d) {
    return color(d); //<-- back to color
  })
var vehiclelegend=VehiclelegendWrapper.selectAll('.VehiclelegendSquare'))

.data(color.domain())//很简单:可以在truck后面包含一个空值:“car”、“van”、“truck”和“”)。正确:添加选择器以启动函数或筛选数据