Im neu auf D3 und versuchen, einen gleitenden Durchschnitt der vorherigen und nächsten Werte auf meine Daten zu tun, um es zu glätten. Derzeit habe ich es mit den 2 vorherigen Werten den aktuellen Wert. Es funktioniert aber 1) wie würde ich auch die nächsten Werte, und 2) was, wenn ich wollte die 15 vorherigen und 15 nächsten Werte verwenden (es wäre verrückt, 30 individuelle Vars für die Speicherung aller von ihnen haben) Im verwendet werden Traditionellen Javascript aber verloren, wie man die Daten auf diese Weise in D3. Hoffe jemand kann mich aufklären, danke. Oder nur die Daten-Parsing-Code hier: Updates: 1) I8217ve legte alle Codebeispiele in codepen. iocollectionnjzYxo 2) Ich werde diesen Beitrag nach I8217m fertig meiner Visualisierung mit React-Serie, weil it8217s 4 Jahre alt und es gibt andere Möglichkeiten zu schreiben Dies jetzt tun. Daten sind das erste D in d3 (oder möglicherweise das dritte, aber es8217s definitiv einer von diesen). Sowieso. Setzen Sie Ihre Daten in die richtige Form ist von entscheidender Bedeutung für prägnante Code, der schnell läuft und ist leicht zu lesen (und später zu beheben). Also, welche Form sollten Ihre Daten in Sie zweifellos haben viele Optionen. Um dieses Tutorial zu befolgen, gehen wir davon aus, dass Sie die Beziehung zwischen den R038D-Ausgaben und dem BIP-Wachstum für eine Reihe von Ländern skizzieren möchten. Sie haben diese Datei. Voll tabellarischer Daten, die für jedes Land einen Namen, einen Kontinent, die Brutto-R038D-Ausgaben in Prozent des BIP, das BIP-Wachstum und für die Kontextpopulation und das Pro-Kopf-BIP auflistet. Also eine sehr grundlegende Ansatz wäre, um jede dieser Variablen in einem unabhängigen Array. (Don8217t bower scrolling, it8217s mehr von der gleichen) Dann können Sie nur erstellen Markierungen für jedes Datenelement und holen jedes Attribut unabhängig. Let8217s tun ein Blasendiagramm zum Beispiel. (Small aside: in der Post habe ich gewonnen8217t gehen Sie durch den Code, um die svg Container oder die Waage, anstatt sich auf die Datenstrukturen. Dieser Code, der wirklich nichts Besonderes ist, finden Sie im Quellcode der Beispiele) . Um unsere Kreise zu kreieren, würden wir so etwas schreiben: Siehe Beispiel in einem eigenen Tab oder Fenster, aber das ist die Hölle. Wenn aus irgendeinem Grund ein Fehler in einem der Werte auftritt, beispielsweise aufgrund einer Katze oder eines kleinen Kindes in der Nähe des Computers, ist der Fehler sehr schwierig zu beheben. Ein weiteres Problem ist, dass es sehr schwierig ist, jede Art der nachfolgenden Behandlung auf die Daten anzuwenden. Zum Beispiel werden Sie feststellen, dass es kleinere Blasen vollständig innerhalb der großen Orangenblase, die geschieht, auf sie zu sein. Es ist also nicht möglich, die kleineren Blasen zu überstreichen. Ein Weg, um Adresse, die zu sortieren Daten in der Reihenfolge der abnehmenden Bevölkerung (die Größe der Blasen), so dass es unmöglich wäre, diese Art von Situation zu haben. Nun, während es möglich ist, 6 Arrays nach den Werten von einem zu sortieren, ist es sehr chaotisch. Idealerweise sollten Sie alle Werte haben, die in einem einzigen Objekt grafisch übersetzt werden sollen. Sie möchten ein Array dieser Objekte haben, das Sie an die Datenmethode übergeben und so etwas schreiben können: Hier haben Sie nur eine Datenquelle, die viel sicherer ist. Also, wenn you8217re denken: Ich weiß, ich sollte eine Variable wie folgt zu erstellen: und dies getan, und darüber hinaus, wenn Sie 8220Hey denken, kann ich dies in Excel aus meiner CSV-Datei, mit einer Formel, die ich über die rows8221 kopieren , Müsst ihr jetzt im Namen all dessen, was gut und heilig ist, aufhören. Obwohl es funktioniert: Dieser Ansatz hat eine Reihe von Fehlern, die Sie alle vermeiden können, wenn Sie lesen. Zuerst wird die Ausführung Ihres Programms gestoppt, während Ihr Browser den Quellcode liest, der die Variable 8220data8221 enthält. Dies ist für 36 Zeilen vernachlässigbar, aber da Objekte immer größer und komplexer werden, kann eine äquivalente Variable Sekunden oder sogar Minuten zum Laden benötigen. Und jetzt haben wir ein Problem. That8217s ein Problem für Ihre Benutzer. Nun zu Ihnen: das Erstellen einer JSON-Variablen aus tabellarischen Daten ist mühsam und fehleranfällig. Die Formelbearbeitung Schnittstelle in Excel doesn8217t wirklich helfen Ihnen, wo Sie ein Zitat oder einen Doppelpunkt verlegt haben. Infolgedessen ist dies sehr zeitaufwändig. Don8217t tun, dass: es ist ein viel einfacher Weg. Gibt die Funktion d3.csv ein. Here8217s, wie es funktioniert. Sie sagen Ihrer d3.csv-Funktion den Speicherort einer csv-Datei (die wir alle zusammen hatten) und eine Funktion, die auf dem Array von Objekten laufen muss (was wir immer wollten), indem Sie die erste Zeile als Schlüssel erstellt haben. Mit anderen Worten, sobald innerhalb der d3.csv-Funktion, die 8220csv8221 Variable wird genau das, was wir zugewiesen 8220data8221 früher, mit einem großen Unterschied, dass wir didn8217t haben, um diese Variable zu produzieren oder jede Art von manuellen Eingriff zu machen: wir sind Bestimmt entspricht er genau der Datei. Eine nette Sache mit dieser Methode ist, daß, da Ihre Variable nicht explizit im Quellcode ist, Ihr Browser es viel schneller lesen kann. Die Daten werden nur gelesen, wenn die Funktion d3.csv aufgerufen wird, im Gegensatz zum vorherigen Ansatz, bei dem die Gesamtheit des Quellcodes (einschließlich der Daten) gelesen werden musste, bevor die erste Anweisung ausgeführt werden konnte. Natürlich macht es nur einen Unterschied, wenn die Datengröße signifikant ist. Aber mit der d3.csv Ansatz würde Sie anzeigen eine 8220loading data8221 Warnung irgendwo auf Ihrer Seite, und entfernen Sie es, wenn in d3.csv. Viel besser als eine leere Seite. Drei Einschränkungen mit dieser Methode. Dies funktioniert nicht mehr in einem lokalen Dateisystem (dh beim Öffnen einer Datei im Browser). Die resultierende Datei kann nur auf einem Webserver laufen, der lokal sein kann (dh die Seite hat eine URL). Was auch immer in der d3.csv-Funktion geschieht, ist nicht mehr im globalen Geltungsbereich des Programms. Dies bedeutet, dass nach dem Start des Programms können Sie nicht öffnen Sie die Javascript-Konsole und überprüfen Sie den Wert von 8220csv8221, zum Beispiel. Dies macht diese Programme etwas schwieriger zu debuggen (es gibt natürlich Möglichkeiten, wenn). Alles, was aus der Datei gelesen wird, wird als Strings behandelt. Javascript macht eine Menge von Typ-Konvertierung aber darauf achten, dass, oder Sie haben Überraschungen. Dies ist, warum ich schrieb x (d. GERD) zum Beispiel (vor einer Zeichenfolge konvertiert sie in eine Zahl). Um diese überlegene Art der Datenerfassung zu feiern, werden wir in eine animierte Dateneingabe geworfen: Die Kreise werden bei einem Standardwert initiiert und bewegen sich zu ihrer Position. Sie können den Link überprüfen, um den Übergangseffekt zu sehen. So ist auf der Ebene der Marke (dh unserer Kreise) die bequemste Form der Daten ein Objekt mit mindestens so vielen Tasten, wie es grafische Eigenschaften dynamisch ändern. Eine flache Datenreihe ist in Ordnung, wenn wir nur eine Datenreihe haben. Aber was, wenn wir mehrere Serien in der Tat haben, haben die meisten Visualisierungen eine Struktur und eine Hierarchie. So let8217s gehen mit unseren Daten, aber jetzt let8217s nehmen an, dass wir Werte für verschiedene Kontinente als unterschiedliche kleine Scatterplots (8220small multiples8221) zeigen wollen. Intuitiv: we8217ll wollen 5 8220g8221 Gruppen zu unserem svg Behälter addieren, eine für jeden Kontinent und fügen dann ein Punkte pro Land in jedem Kontinent diesen Gruppen hinzu. Unsere Flat-Array so8217t Arbeit so gut dann. Was tun? Die Antwort d3 auf dieses Problem ist der d3.nest () Satz von Methoden. D3.nest () dreht ein flaches Array von Objekten, das dank d3.csv () ein sehr einfach verfügbares Format ist, in einem Array von Arrays mit der Hierarchie, die Sie benötigen. Nach unserer Intuition, wouldn8217t es schön, wenn unsere Daten wäre: Ein Array aus 5 Elementen, eine für jeden Kontinent, so könnten wir die 8220g8221 Gruppen erstellen, Und wenn jedes dieser 5 Elemente enthalten ein Array mit den Daten aller entsprechenden Länder, noch in diesem Objekt-Format, das wir lieben Dies ist genau das, was d3.nest (). D3.nest (), go Mit der. key () - Methode geben wir an, was wir zur Erstellung der Hierarchie verwenden werden. Wir wollen diese Daten nach Kontinenten gruppieren, so dass wir diese Syntax verwenden..sortKeys wird verwendet, um die Schlüssel in alphabetischer Reihenfolge zu sortieren, so dass unsere Panels in der alphabetischen Reihenfolge der Kontinente erscheinen. Wenn wir dies auslassen, erscheinen die Panels in der Reihenfolge der Daten (dh Ozeanien zuerst als Australien ist das erste Land). Wir hätten das vermeiden können, indem wir zuerst die Daten nach dem Kontinent sortierten, bevor wir sie verschachtelten, aber es war einfacher. Hier haben wir nur eine Ebene der Gruppierung, aber wir könnten mehrere durch Verkettung mehrere. key () - Methoden haben. Der letzte Teil der Anweisung. Einträge (csv), sagt, dass wir diese Operation auf unsere CSV-Variable zu tun. Hier ist, was die Daten-Variable aussehen wird: Nun, da wir unsere Daten in einer idealen Form let8217s ziehen die Marken: (Sie können auf den Link klicken, um den Übergangseffekt sehen und lesen Sie die vollständige Quelle). Dies ist alles sehr schön, aber wouldn8217t es besser, wenn wir einige aggregierte Informationen aus den Kontinenten Let8217s versuchen, um herauszufinden, die durchschnittlichen Werte für R038D Ausgaben und BIP-Wachstum zu charakterisieren könnten. Kann es leicht gemacht werden Dies ist ein Job für die andere main d3.nest-Methode, Rollup. Rollup ist die Aggregationsfunktion. Hier ist ein Beispiel. Denken Sie daran, wie die Kombination von. key () und. entries () ein Array in Arrays von kleineren Arrays umgibt, wobei der Wert, der an die Funktion innerhalb der Rollup-Methode übergeben wird, jeder dieser Arrays ist Array von allen Objekten entsprechend Ländern in Amerika, dann ein Array von allen Objekten entsprechend Ländern in Europa, etc.) Auch wenn wir sortKeys in unserer vorherigen Nesting-Bemühung verwenden, verwenden wir sie auch hier besser. Hier ist, was die Variable aussehen wird: Unglaublich nur die Werte, die wir brauchen. Jetzt geht es nur darum, sie zur Skizze hinzuzufügen. Zwei kleine Ergänzungen hier: Dies ist das letzte Beispiel 8211 wieder können Sie auf den Link klicken, um den Übergang zu sehen und erhalten Sie die Gesamtheit der Quelle. Auf der Markierungsebene möchten Sie Objekte mit so vielen Eigenschaften haben, wie Sie grafische Variablen (wie x, y, füllen usw.) mit d3.csv () und eine flache Datei benötigen (d3 bietet auch Funktionen wie D3.json oder d3.xml, um Daten in einem anderen Format zu verarbeiten). D3.nest kann Ihnen helfen, gruppieren Sie Ihre Einträge, um Ihre Daten zu strukturieren und erstellen Sie mehr anspruchsvolle Visualisierungen Rollup kann verwendet werden, um die Daten gruppiert mit d3.nest Post navigation Lassen Sie eine Antwort Antworten abbrechen Sehr gut Tutorial Jerome 8211 während CSV doesn8217t bieten 8220spontaneous8221 Daten wie a MySQL-Abfrage, es verbessert sich erheblich auf die manuelle Eingabe-Ansatz. Ich vermute, die CSV könnte mit genug Flexibilität und Detail entworfen werden, um eine Datenbank zu simulieren, mit verschiedenen Filtern in d3. Hallo, danke obwohl d3 kann vollständig interagieren mit einer Datenbank wie mySQL mit einem ähnlichen Ansatz jeromecukier. netblog20120102using-d3-mit-a-mysql-Datenbank, aber wenn Sie Daten im tabellarischen Format zu beginnen, ist d3.csv sehr praktisch Sehr nützlich Tutorial I8217d wie zwei Fragen zu stellen: Erstens: kann ich umbenennen die Attribute GERD und Wachstum, sagen wir. Als avgGERD oder avggrowth anstelle des alten Namens (Think of the AS-Schlüsselwort in SQL) zweite Frage: Bin ich gezwungen, zuvor alle Länder gruppieren, um die gleichen Attribute (in diesem Fall GERD und Wachstum) über das Array zu durchschnittlich Der Länder in einem Kontinent I8217m sollte auf einer ähnlich verschachtelten Struktur und I8217ve einige Mühe arbeiten, da ich can8217t definieren einen Accessor für die d3.mean () - Funktion. Vielen Dank im Voraus funktionieren würde. (Oder einen gültigen Schlüsselnamen anstelle von a und b). 2) technisch, nein. Aber Sie können wollen. Für jede Datenoperation in d3 oder Javascript im Allgemeinen, und dies ist etwas, das ich in das Tutorial gesetzt haben könnte, gibt es die Möglichkeit, von einer leeren Struktur (entweder ein leeres Array oder ein leeres Objekt), Schleife durch die Quelldaten und starten Fügen Sie etwas zur Struktur hinzu. Zum Beispiel könnte ich schreiben: avgs csv. forEach (Funktion (d) var cd. continent wenn (avgs) avgs. navgs. n1 avgs. GERDavgs. GERDd. GERD avgs. growthavgs. growthd. growth sonst avgs) keys (avgs). Für jede (Funktion (c) avgs. GERDavgs. GERDavgs. n avgs. growthavgs. growthavgs. n) wird dies die gleiche Ausgabe wie zuvor ohne eine Nesting-Funktion, it8217s ein bisschen länger zu schreiben, aber möglicherweise klarer. Weniger triviale Operationen sind auch während der Schleife möglich. Vielen Dank für die schnelle Antwort Irgendwann habe ich das gleiche mit Ausnahme der Tatsache, ich habe nur einfach Javascript. Ich war neugierig, wenn man die Aufgabe innerhalb der. rollup () - Funktion ausführen könnte. PS: Kudos für Ihre große Lehr-Stil, I8217m Lernen d3 und dieses Tutorial war unglaublich nützlich. Haufen von Kommentaren hier reden über die Arbeit mit einer echten Datenbank aber die nette Sache über dieses aus csv ist, dass Sie immer die Daten aus Ihrer Datenbank zu ziehen und schreiben csv-Dateien mit ihm 8211 auf diese Weise die Daten sowohl herunterladbar und funktioniert mit Das Tutorial sehr schön. Das würde obv geben dem Benutzer mehr Flexibilität, um die Daten auf andere Weise verwenden, sollten sie wollen oder müssen. Hallo Jerome. Das ist unglaublich hilfreich für mich. Eine Frage 8211, wie ich den Code ausführen, ohne die Namen der Attribute (Kontinent, GDP, etc.) I8217m sehr neu zu d3 so leid, wenn dies einfach ist. Ihr Code für die Referenz unten: d3.csv (8220data. csv8221, Funktion (csv) zuerst sortieren wir die Daten, dann erstellen wir die Markierungen, die wir in eine Ausgangsposition svg. selectAll (8220circle8221).data (csv).enter ( (8220c8221, Funktion (d)).attr (8220c8221, Funktion (d)) jetzt beginnen wir 8211, die Markierungen an ihre Position zu bewegen Große Tutorial, dies War super hilfreich für meinen Eintritt in d3 mit csvs I8217m versuchen, ein Liniendiagramm mit Datum als die x-Achse, die Summe der Aufträge als die y-Achse, und eine Zeilenfarbe für jeden meiner drei Läden. Mein Datensatz hat eine Zeile für Jeden Auftrag, so muss ich die Reihenfolge nach Datum und speichern: d3.csv (Datei, Funktion (Fehler, Daten) Daten data. map (Funktion (d) return store: d. store, date: parseDate (d. date ), Bestellungen: d. orders) Ich bekomme immer einen Fehler an dieser Zeile in den Code, und obwohl die Achse sind auf der Seite gezeichnet, gibt es keine Daten: Können Sie bieten jede Einsicht Vielen Dank im Voraus i can8217t definitiv ohne zu sehen Datendatei, aber meistens, definieren Sie Ihre Zeile Funktion irgendwo gut, würde der Name der Attribute aus Ihrer Datendatei kommen. So dass davon ausgegangen, dass Sie wissen, Ihre Datei. Dass gesagt, für jedes Element des Arrays, können Sie tun, d3.keys (), die die Liste der Eigenschaften dieses Elements zurückgeben wird. Dh d3.keys (csv0). Hi Jerome, ich bin sehr neu in D3.js, derzeit arbeitete ich an einem Schulprojekt mit d3 und json. Ihr Tutorial war sehr hilfreich, so entscheide ich, es in meinem Projekt implementieren, da es die verschachtelten Daten seine viel ähnlicher zu mir, obwohl meine ist json Datei. Im Moment gruppiert es die Daten korrekt leider die einzelnen Daten, die durch den Kreis dargestellt wird, funktionieren nicht. Ich frage mich, was schief gelaufen ist, ich schätze es wirklich, wenn Sie einen Blick an ihm nehmen können. Hier ist der Link zum Projekt (githubemeshIPU-Zabbix-D3) Vielen Dank im Voraus Hey, danke für das Tutorial. Ich war ein wenig weg von den 3 Vorbehalte, aber they8217re eigentlich viel kleiner als Sie es klingen: 1. Ein wirklich einfacher Weg, um etwas auf einem Webserver laufen wird mit Site44 8211 Host die Dateien aus Ihrem dropbox. 2. Nicht sicher, dass ich dieses verstehen. Definieren Sie einfach eine globale Variable, dann weisen Sie ihr Werte im Callback zu. 3. Yep. Viele Tutorials über die Verwendung von json oder csv mit d3.json oder d3.csv, aber die einfachste Idee der Verwendung eines Arrays oder Datenobjekt ist immer noch ein mystery8230 Für einfache Anwendungen, die Aktualisierung eines Json oder CSV-Datei dynamisch ist ein Albtraum. In der Lage, ein Objekt mit den erforderlichen Daten dynamisch laden sollte einfach sein, verdammt es wirklich hilfreich Tutorial. ThanksD3.js Kontrakte Die folgende Tabelle zeigt die Statistiken für D3.js Fähigkeiten in IT-Verträgen, die in ganz Großbritannien angekündigt werden. Inbegriffen ist ein Leitfaden für die Auftragnehmer Preise in IT-Verträge angeboten, die D3.js über die 3 Monate bis 25. Januar 2017 mit einem Vergleich zum gleichen Zeitraum in den letzten 2 Jahren zitiert haben. Beachten Sie, dass tägliche Vertragspreise und Stundentarifsätze separat behandelt werden. Bei der Berechnung der durchschnittlichen Vertragspreise werden die Tagespreise nicht von den angegebenen Stundensätzen oder umgekehrt abgeleitet. 3 Monate bis 25 Januar 2017 Gleichen Zeitraum 2016
No comments:
Post a Comment