我有点困惑我需要使用javascript加载多个CSV文件,我需要更改每个加载的数据集的某些属性。所以基本上我使用这个名为d3的框架,我想加载3个csv文件,然后对于每个csv文件,我需要更改为平行坐标图绘制的线条颜色。目前我正在使用三个数据加载,但这会弄乱我的情节,我的价值已经全部结束。
// load csv file and create the chart
d3.csv('X.csv', function(data) {
pc = d3.parallelCoordinates()("parallelcoordinates")
.data(data)
.color(color)
.alpha(0.4)
.render()
.brushable() // enable brushing
.interactive() // command line mode
var explore_count = 0;
var exploring = {};
var explore_start = false;
pc.svg
.selectAll(".dimension")
.style("cursor", "pointer")
.on("click", function(d) {
exploring[d] = d in exploring ? false : true;
event.preventDefault();
if (exploring[d]) d3.timer(explore(d,explore_count,pc));
});
我做了以上三次。现在发生的是,所有数据都绘制在同一个图形上,但随后值重叠(基本上它们的三个图形在彼此之上)。我希望将它集成在一起,我认为最好的方法是巧妙地加载JS文件并以某种方式操作它。我不知道怎么回事。有人会告诉我我将如何实现这一目标吗?
答案 0 :(得分:7)
这个帖子很有用:https://groups.google.com/forum/#!msg/d3-js/3Y9VHkOOdCM/YnmOPopWUxQJ
链接中的最佳解决方案(IMO)是:
var rows1, rows2, remaining = 2;
d3.csv("file1.csv", function(csv) {
rows1 = csv;
if (!--remaining) doSomething();
});
d3.csv("file2.csv", function(csv) {
rows2 = csv;
if (!--remaining) doSomething();
});
function doSomething() {
// … do something with rows1 and rows2 here …
}
答案 1 :(得分:2)
您可以使用d3 queue同时加载文件。一个例子;
d3.queue()
.defer(d3.csv, "file1.json")
.defer(d3.csv, "file2.json")
.defer(d3.csv, "file3.json")
.await(function(error, file1, file2, file3) {
if (error) {
console.error('Oh dear, something went wrong: ' + error);
}
else {
doSomeStuff(file1, file2, file3);
}
});