这就是 网页 我试图通过启用交叉过滤来使其动态化.所以他们有多个API。
对于顶部的前两个。TOTAL CASES
& DAILY CASES
他们正在使用这个 API 而最上面的第三个则是基于这个。API.
后面三个 AGE
, GENDER
和 NATIONALITY
是来自于这个 API.
在所有的API中,有一件事是共同的,那就是日期,但也有一些API中的一些数据是缺失的几个日期,如有一个缺口(对一些日期不可用)。
因此,我想结合所有的JSON API的日期,然后允许交叉过滤,因为我相信我可以使他们之间的交叉过滤。如果我错了,请纠正我。
就像如果我点击性别女性,因为它给出了关于总病例的信息,患者是女性,所以只有确认的病例从总病例将改变,而不是恢复,死亡的数据是不可用的。所以我想我应该把前3个图表和性别、年龄、国籍图表合并在一起。这样Dc js就可以很好地处理各部分之间的过滤(与地标相关的案例,与个人信息相关的案例)。
第123行。
var log = console.log;
var q = queue()
.defer(d3.json, "https://api.covid19india.org/data.json")
.defer(d3.json, "https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history");
q.await(function(error, data1, data2) {
log("==========>");
log("data1:", error,data1);
log("data2:", data2);
});
这不行,因为我看不到... ... console.log()
输出。
https:/blockbuilder.orgninjakx8c48ab6481311aa0452046d66c4d8701。
所以我的问题是
1)为什么d3.queue不能用?
2)建议把所有的数据合并在一起,允许填报是否是个好主意,因为数据有限。我是否应该在同一个api图表之间进行交叉过滤。所以在这种情况下,我将有2个部分(与地标相关的案例,与个人信息相关的案例)...使用DC js,我想让它更加互动,并显示更多的信息。
你的第一个问题的答案很简单:你不需要d3.queue,而且它是一个很好的例子。弃用和删除 在d3@5中,D3的数据加载API使用ES6承诺代替异步回调。
从 d3@5 开始,D3 的数据加载 API 使用 ES6 Promises 而不是异步回调,因此您可以使用 Promise.all([...])
而不是d3.queue。显然没有办法让新的API在用旧的方式调用时发出错误,所以就这样默默地失败了:-。
新的写代码的方式是
Promise.all([
d3.json("https://api.covid19india.org/data.json"),
d3.json("https://api.rootnet.in/covid19-in/unofficial/covid19india.org/statewise/history")
]).then(([data1,data2]) => {
log("==========>");
log("data1:", data1);
log("data2:", data2);
})
.catch(error => log('error', error))
我发现这样更容易阅读和理解。一个很好的副作用是,如果你忽略了错误处理(像大多数人一样),你会自动在日志中得到一个清晰的信息。
你的第二个问题是相当开放的,也许最好把这个问题带到。dc.js用户组?
一般来说,很难交叉过滤多个数据集。你会有多个图表组一起重新绘制,你必须在一些图表上手动添加处理程序来启动、清除过滤器,并重新绘制其他图表组。
我还没有看到太多这样做的仪表盘。你得让用户清楚地知道是怎么回事。