anychart - AnyChart - 柱形图:获取汇总的一个类别的值
问题描述
我试图让一个小的 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,CA 应为 8 - 仅过滤会计师时,美国应为 5,CA 应为 9
xMode() 函数没有完成这项工作,因为它没有总结,而只是覆盖。有没有办法让它在 AnyChart 中工作?
提前感谢,如果这个问题已经得到解答,我很抱歉,我在尝试搜索时没有找到合适的答案。
解决方案
笛卡尔图不对用户数据应用任何聚合。如果同一类别(美国或加拿大)有多个值,图表将显示最新值。最新的值会覆盖以前的值。为了满足您的要求,您应该在应用于图表之前对数据进行预处理。这意味着在过滤器功能中,您应该根据过滤条件创建包含聚合值的新数据集。例如,您想显示“开发”中的员工总数。那么你应该总结美国和加州“发展”的“男性”和“女性”。然后生成的数据集应如下所示:
var dataSet = anychart.data.set([
["US", 23],
["CA", 37]
]);
然后将这个新数据集应用到图表中。它可以在过滤器功能内部完成。
推荐阅读
- java - Javac -vresion 为空,如何设置?
- linear-regression - PyTorch 不会将直线拟合到两个数据点
- html - 为什么 z-index 不适用于不透明度和变换
- xcode - Xcode,Pods ProjectName.debug.xcconfig 无法打开文件。错误的目录
- python - Python - 从 10000 个随机值创建稀疏矩阵表示
- spring - Spring Boot 应用程序无法在 jboss eap 6.3 上启动
- c# - 组合框中的内容不显示来自数据库的数据,但 system.data.datarowview
- java - Hiberate one-to-one annotaion builds wrong sql query
- java - QuerydslPredicateExecutor问题MongoDB-Spring
- python - "Batch op errors occurred" on insert_many for list of dict