AnyChart - 柱形图:获取汇总的一个类别的值

AnyChart - Column Chart: get values of one category summarized

我试图让一个小的 AnyChart 图表正常工作,但我的数据设置有一些问题。 我想要的是一种供用户过滤数据的方法。因此,我必须提供在数据集中过滤所需的所有信息。在图表中,仅使用顶级类别,并且应显示过滤器适用的所有行的汇总值。

代码来了:

<html>
<body>
<script src="https://cdn.anychart.com/releases/8.2.1/js/anychart-bundle.min.js"></script>

<select id='depFilter'><option value='*'>All</option><option value='Development'>Development</option><option value='Accounting'>Accounting</option><option value='Sales'>Sales</option></select><br>
<select id='genderFilter'><option value='*'>All</option><option value='female'>female</option><option value='male'>male</option></select><br>
<button onClick='filterChart()'>Filter</button><br>
<div id="container"></div>

<script language='JavaScript'>
anychart.onDocumentReady(function() {
  // create line chart
  var dataSet = anychart.data.set([
    ["US", "Development", "male", 20],
    ["US", "Development", "female", 3],
    ["US", "Accounting", "male", 1],
    ["US", "Accounting", "female", 4],
    ["US", "Sales", "male", 15],
    ["US", "Sales", "female", 16],
    ["CA", "Development", "male", 12],
    ["CA", "Development", "female", 25],
    ["CA", "Accounting", "male", 1],
    ["CA", "Accounting", "female", 8],  
    ["CA", "Sales", "male", 30],
    ["CA", "Sales", "female", 18],  
  ]);

  chart = anychart.column();
  baseMapping = dataSet.mapAs({'x': 0, 'dep': 1, 'gender': 2, 'value': 3});
  series = chart.column();

  filterChart();

  chart.container('container');
  chart.draw();
});

function filterChart() {
  var filteredMapping = baseMapping.filter("dep", function(value) { return document.getElementById("depFilter").value == '*' || value == document.getElementById("depFilter").value; });
  filteredMapping = filteredMapping.filter("gender", function(value) { return document.getElementById("genderFilter").value == '*' || value == document.getElementById("genderFilter").value; });

  series.data(filteredMapping);
}
</script>

如您所见,每个国家/地区都有针对部门和性别的过滤器。值是员工人数。 到目前为止,该图表仅显示每个区域的最新数据点。它应该做的是显示过滤器适用的所有员工的总和。 例子: - 过滤女性会计师时,美国应为 4,加利福尼亚应为 8 - 仅针对会计师过滤时,美国应为 5,CA 应为 9

xMode() 函数没有完成这项工作,因为它不总结而只是覆盖。 有没有办法让它在 AnyChart 中工作?

提前致谢,如果这个问题已经得到解答,我深表歉意,我在搜索时没有找到合适的答案。

笛卡尔图表不对用户数据应用任何聚合。如果同一类别(美国或加拿大)有多个值,图表将显示最新值。最新值覆盖以前的值。 为了满足您的要求,您应该在应用于图表之前预处理数据。这意味着在过滤功能中,您应该根据过滤条件创建包含聚合值的新数据集。例如,您要显示 "development" 中的员工总数。那么您应该将美国和加拿大的 "development" 的 "male" 和 "female" 相加。那么生成的数据集应该如下所示:

  var dataSet = anychart.data.set([
    ["US", 23],
    ["CA", 37]
  ]);

然后将这个新数据集应用到图表中。可以在过滤函数里面完成。