csv do tablicy w d3.js

Używam tego do analizy pliku csv i utworzenia tablicy danych, jak określono w dokumentach d3:

d3.csv("afile.csv", function(data) {
    data.forEach(function(d) {
    d.date = formatDate.parse(d.date);
    d.price = +d.price;
});

Jednakże, jeśli po tej metodzie próbuję wywołać {[1] } to mówi, że jest niezdefiniowana. Czy to dlatego, że data jest odniesieniem, a gdy {[3] } jest poza zasięgiem, zostaje zniszczony? Jeśli tak jest, jak Mogę to przezwyciężyć. I need to reference data out of d3.csv()

 33
Author: VividD, 2012-02-29

4 answers

D3.csv jest metodą asynchroniczną. Oznacza to, że kod wewnątrz funkcji wywołania zwrotnego jest uruchamiany po załadowaniu danych, ale kod PO i poza funkcja wywołania zwrotnego zostanie uruchomiona natychmiast po złożeniu żądania, gdy dane nie są jeszcze dostępne. Innymi słowy:

first();
d3.csv("path/to/file.csv", function(rows) {
  third();
});
second();

Jeśli chcesz użyć danych załadowanych przez d3.csv, musisz albo umieścić ten kod wewnątrz funkcji zwrotnej (gdzie third jest, powyżej):

d3.csv("path/to/file.csv", function(rows) {
  doSomethingWithRows(rows);
});

function doSomethingWithRows(rows) {
  // do something with rows
}

Lub możesz zapisać go jako globalny zmienna w oknie, do której później możesz się odwołać:

var rows;

d3.csv("path/to/file.csv", function(loadedRows) {
  rows = loadedRows;
  doSomethingWithRows();
});

function doSomethingWithRows() {
  // do something with rows
}

Jeśli chcesz, możesz również przypisać załadowane dane jawnie do obiektu window, zamiast deklarować zmienną i zarządzać dwoma różnymi nazwami:

d3.csv("path/to/file.csv", function(rows) {
  window.rows = rows;
  doSomethingWithRows();
});

function doSomethingWithRows() {
  // do something with rows
}
 122
Author: mbostock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-29 00:41:35

Myślę, że Twoim problemem jest wyczucie czasu, ponieważ jest to połączenie asynchroniczne. Więc załaduj dane tak, jak masz, ale wywołaj funkcję w kodzie d3 (gdzie Mike ma ' doSomethingWithRows()'). Nie podążaj za swoim kodem d3 z jakimkolwiek przetwarzaniem (gdzie Mike ma 'second ()'), przenieś ten kod do funkcji' doSomethingWithRows ()'. Będzie miał dostępne Dane i można odejść...

 3
Author: Andrew NZ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-16 04:50:03

Myślę, że problem jest już rozwiązany, ale spotkałem się z podobnym problemem i powyższa dyskusja nie była tak pomocna. Więc publikując, jak wymyśliłem wyjście z tego problemu: tutaj powodem, dla którego data[0] jest niezdefiniowany, jest prawdopodobnie dlatego, że same dane nie są odczytywane przez przeglądarkę. Ten brak odczytu jest prawdopodobnie spowodowany bezpośrednim załadowaniem pliku danych (csv), tzn. za pomocą następującego polecenia d3.csv("myCSVfile.csv",....). Takie podejście może nie działać, ponieważ aplikacje internetowe zwykle wymagają ładowania plików z serwerów WWW (nie pewnie, dlaczego tak jest). Więc lokalny serwer WWW musi być wprowadzony. Użyj tego forum, aby dowiedzieć się, jak: Jak skonfigurować lokalny serwer HTTP za pomocą Pythona . Zaktualizowany Kod, jeśli używasz Pythona 3 do tworzenia lokalnego serwera www będzie: d3.csv("http://localhost:8000/myCSVfile.csv",.....).

 0
Author: Maneet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-25 21:14:57

Można zadeklarować zmienną poza funkcją callback, a następnie przypisać ją wartościami z pliku csv:

var csv_data;
d3.csv("afile.csv", function(data) {
  data.forEach(function(d) {
    d.date = formatDate.parse(d.date);
    d.price = +d.price;
  csv_data = data;
});

A następnie użyj csv_data poza wywołaniem zwrotnym

 -2
Author: msonsona,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-29 00:37:21