我有2个饼图,其数据如下:
data: [
{diseaseType: 'Cancer', diseaseDetails: 'Lung cancer', quantity: 100},
{diseaseType: 'Diebetes', diseaseDetails: 'Unspecific', quantity: 650},
{diseaseType: 'Cancer', diseaseDetails: 'Breast cancer', quantity: 80}
]
我想获取过滤器列表,并能够按用户要求将其删除(这是唯一的受控测试代码):
this.diseasePieChart.filters().splice(0, 1)
dc.renderAll()
它正在更新第一个图表,但是第二个(与第一个图表连接)没有更新,就像删除过滤器之前一样。
我正在渲染第二张图表:
self.diseasePieChart.on('filtered.monitor', function (chart) {
// create dimensions etc and render second chart
}
我还尝试在删除过滤器后再次执行crossfilter(data)。当我打电话给dc.filterAll
时,所有过滤器都会重置。
感谢您的帮助!
答案 0 :(得分:1)
更改过滤器的正确入口点是chart.filter()或chart.replaceFilter(),具体取决于您是尝试切换单个项还是一次更改整个过滤器阵列。
如您所见,操纵图表内的过滤器数组可能会影响图表的绘制方式,但不会将更改传达给交叉过滤器维度和其他图表。
请注意,如上面的链接所述,这些函数中每个函数的参数可接受的类型都有些令人惊讶:
filter参数可以采用以下形式之一:
- 单个值:将切换该值(如果当前过滤器中不存在该值,则将其添加;如果存在,将其移除)
- 一个包含单个值数组(
[[value,value,value]]
)的数组:每个值都被切换- 在适合图表时,使用直流滤波器对象,例如
dc.coordinateGridMixin图表的
- dc.filters.RangedFilter
- dc.filters.TwoDimensionalFilter用于热图
- dc.filters.RangedTwoDimensionalFilter用于散点图
null
:将使用resetFilterHandler重置过滤器
因此,如果要获取数组,请删除一个项目,然后再将其重新设置,您可以:
var filters = chart.filters().slice(0); // copy the array of filters
filters.splice(0,1)
chart.replaceFilter([filters])
.redrawGroup();
或(使用切换功能):
chart.filter(chart.filters()[0])
.redrawGroup();
请注意,您通常希望在更改滤镜后重绘而不是渲染。这样可以显示动画的过渡效果,并且速度更快。
此外,chart.redrawGroup与dc.redrawAll()
相同,但是如果以后有更多图表组,它会更安全一些。