2014-02-19 3 views
3

Я немного смущен Мне нужно загрузить несколько файлов CSV с помощью javascript, и мне нужно изменить некоторые свойства каждого загруженного набора данных. Поэтому в основном я использую эту структуру под названием d3, и я хочу загрузить 3 csv-файла, а затем для каждого из файлов csv мне нужно изменить цвет линий, построенных для графика параллельных координат. В настоящее время я использую три загрузки данных, но это испортит мой сюжет, и у меня есть ценности во всем.Загрузка нескольких CSV-файлов в Javascript

// 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

Я бы загрузил эти три файла в три массива объектов, контактировал их и передал их D3 – dandavis

ответ

7

Эта нить будет полезно: https://groups.google.com/forum/#!msg/d3-js/3Y9VHkOOdCM/YnmOPopWUxQJ

Лучшее решение (ИМО) по ссылке это:

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 … 
    } 
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); 
    } 
}); 
Смежные вопросы