【发布时间】:2021-10-06 23:32:33
【问题描述】:
我不确定我的问题表述得非常好,这也许可以解释为什么我无法找到一个好的答案,但我真的很感激一些建议!我是 d3 的新手(也是 JavaScript 初学者),正在条形图上绘制一些数据。这是我的 CSV 文件的几行:
Year,City,Sport,Discipline,Athlete,Country,Gender,Event,Medal
2012,London,Gymnastics,Trampoline,"HUANG, Shanshan",CHN,Women,Individual,Silver
2012,London,Gymnastics,Trampoline,"HE, Wenna",CHN,Women,Individual,Bronze
2012,London,Handball,Handball,"ABALO, Luc",FRA,Men,Handball,Gold
2012,London,Handball,Handball,"ACCAMBRAY, William",FRA,Men,Handball,Gold
2012,London,Handball,Handball,"BARACHET, Xavier",FRA,Men,Handball,Gold
我计划沿 x 轴绘制国家,但显示所有国家太宽了。按年过滤后,我还有 87 个不同的国家/地区
const startData = await d3.csv(‘olympics.csv’);
console.log(startData);
data = startData.filter(function (d) { return d.Year == year });
console.log(data);
console.log(d3.map(data, function (d) { return (d.Country) }).keys()); //Here I have 86 Countries remaining
我想筛选出排名前 15 位的国家/地区。
我能想到的唯一方法是像这样为每个计数:
var countries = (d3.map(data, function (d) { return (d.Country) }).keys()
countries.forEach(function(country) {
console.log(data.filter(function (d) { return d.Country == country }).length);
}
...保存该计数而不是 console.log,对结果进行排序并以某种方式使用前 15 个。
这似乎草率,我希望有人有建议并愿意分享。
提前感谢您,如果不清楚,我很乐意尝试进一步解释。
【问题讨论】:
-
您需要使用特定版本的 D3 吗?
-
到目前为止,我一直在使用 v5,不想影响我已有的任何东西。除此之外,我并不局限于特定版本。
-
如果您经常这样做,请尝试查看 crossfilter 的 open fork,它专为此类任务而设计 - github.com/crossfilter/crossfilter
标签: javascript csv d3.js