Javascript 如何更新crossfilter dimension.filter()上的地图比例?

Javascript 如何更新crossfilter dimension.filter()上的地图比例?,javascript,d3.js,dc.js,crossfilter,Javascript,D3.js,Dc.js,Crossfilter,我正在用d3、dc和交叉滤波器构建仪表板。 数据集是一个tsv,如下所示: ID类型val 1个pop 10000 1变量100 2个pop 15000 2变量-500 等等…… 我创建的第一个维度位于“类型”列上,我将其过滤为仅使用I指示器类型。在这种情况下,每个城市的人口“pop”绝对值 与使用dc.js相比,我制作了一张地图(带有scale.threshold或scale.quantize)和一些图表,其中数据集以这种方式过滤 我还有一个按钮,允许更改“类型”过滤器以使用数据集中的其他指示

我正在用d3、dc和交叉滤波器构建仪表板。 数据集是一个tsv,如下所示:
ID类型val
1个pop 10000
1变量100
2个pop 15000
2变量-500
等等……

我创建的第一个维度位于“类型”列上,我将其过滤为仅使用I指示器类型。在这种情况下,每个城市的人口“pop”绝对值
与使用dc.js相比,我制作了一张地图(带有scale.threshold或scale.quantize)和一些图表,其中数据集以这种方式过滤

我还有一个按钮,允许更改“类型”过滤器以使用数据集中的其他指示器。在本例中,“var”是一个城市的新居民人数
这是在单击按钮时更新维度过滤器的代码:

$(settings.container + " > button").click(function() {
      //change the active state of the button
      $(settings.container + " > button").removeClass('active');
      $(this).addClass('active');

      //get the name of the indicator type to be filtered from the data-filter button attribute
      var val = $(this).attr('data-filter');


      if(val){// if data-filter exist -> filter the crossfilter dimension
          prinDashboard.dim[settings.dim.dim].filter(val);
      }else{// else filterAll
          prinDashboard.dim[settings.dim.dim].filterAll();
      }

      //redraw all the dc chart and mapp
      dc.redrawAll();
  })
dc.js负责所有地图和图表的更新,所有工作正常,但地图比例不会更新以适应新的数据集
例如,如果我最初定义了一个scale.quantize来输出这5个制动器:0-5000、5000-1000、10000-15000、15000-20000、20000-25000,当我更新数据集时,“var”值也会安装在这些制动器中,这些制动器现在没有意义。
我想要的是能够使用新数据集重建比例,然后更新地图。
在华盛顿有没有办法做到这一点?或者,我如何使用普通d3“破解”dc的功能

我真的很感激任何想法

谢谢你试过了吗

我认为您不需要这样做,但有很多事情不会在dc.js中自动重新缩放

你可以做的另一件更麻烦的事情是简单地重新分配色阶。不过那太可怕了


不管你是否能想出一个解决办法。色标应自动重新计算。

谢谢您的回答。我制作了一个jsfiddle来更好地展示这个问题,而不是打开一个。当你说我可以“简单地重新分配颜色比例”时,你的意思是我可以在调用dc.redrawAll()之前执行myMap.colors(newColors)?是的,这是我的理解。我承认这不是个好办法。小提琴肯定有用。我还没有时间做小提琴。但是我已经按照你的建议重新分配了色标到图表上,还有一些我需要更新的东西。谢谢你接受我的答案。希望解决办法能奏效。我添加了一个。