├── resources ├── styles.css └── index.html ├── .gitignore ├── postcss.config.js ├── tailwind.config.js ├── .github └── workflows │ └── main.yml ├── src └── main │ └── tech │ └── thomas_sojka │ ├── hiccup_d3 │ ├── utils.cljs │ ├── charts │ │ ├── voronoi.cljs │ │ ├── world_map.cljs │ │ ├── contour.cljs │ │ ├── tree.cljs │ │ ├── sunburst.cljs │ │ ├── pack.cljs │ │ ├── graph.cljs │ │ ├── treemap.cljs │ │ ├── line.cljs │ │ ├── chord.cljs │ │ ├── sankey.cljs │ │ ├── pie.cljs │ │ ├── bar.cljs │ │ └── streamgraph.cljs │ ├── macros.clj │ └── app.cljs │ └── shadow_tailwind │ └── dev_hook.clj ├── shadow-cljs.edn ├── package.json ├── public └── data │ ├── population-by-age.json │ ├── frequencies.json │ ├── energy.csv │ ├── unemployment.csv │ ├── flare-2.json │ ├── volcano.json │ ├── miserables.json │ └── apple-stock.csv ├── LICENSE └── README.org /resources/styles.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/css/ 3 | /public/index.html 4 | /public/js/ 5 | /.shadow-cljs/ 6 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | cssnano: {}, 6 | }, 7 | } 8 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | purge: ['./src/main/tech/thomas_sojka/hiccup_d3/**/*.cljs'], 3 | darkMode: false, // or 'media' or 'class' 4 | theme: { 5 | extend: {}, 6 | }, 7 | variants: { 8 | extend: {}, 9 | }, 10 | plugins: [], 11 | } 12 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | 8 | runs-on: ubuntu-latest 9 | 10 | steps: 11 | - uses: actions/checkout@v2 12 | - uses: DeLaGuardo/setup-clojure@master 13 | with: 14 | cli: '1.10.1' 15 | - name: Use Node.js 16 | uses: actions/setup-node@v1 17 | with: 18 | node-version: '14' 19 | - name: npm install 20 | run: npm install 21 | - name: Build 22 | run: npx shadow-cljs release :frontend 23 | - name: Deploy 24 | uses: maxheld83/ghpages@v0.3.0 25 | env: 26 | GH_PAT: ${{ secrets.GH_PAT }} 27 | BUILD_DIR: "public" 28 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/utils.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.utils 2 | (:require [clojure.string :as str])) 3 | 4 | (defn fetch-json [url] 5 | (-> (js/fetch url) 6 | (.then (fn [res] (.json res))) 7 | (.catch (fn [res] (prn res))))) 8 | 9 | (defn csv->clj 10 | [csv] 11 | (let [[header-line & content-lines] (str/split-lines csv) 12 | headers (map #(-> % 13 | (str/split " ") 14 | str/join 15 | keyword) 16 | (str/split header-line ","))] 17 | (map 18 | (fn [line] 19 | (zipmap headers (str/split line ","))) 20 | content-lines))) 21 | -------------------------------------------------------------------------------- /shadow-cljs.edn: -------------------------------------------------------------------------------- 1 | ;; shadow-cljs configuration 2 | {:source-paths 3 | ["src/dev" 4 | "src/main" 5 | "src/test"] 6 | 7 | :dependencies 8 | [[reagent "0.10.0"] 9 | [markdown-to-hiccup "0.6.2"] 10 | [venantius/glow "0.1.6"]] 11 | :dev-http {8080 "public"} 12 | :builds 13 | {:frontend 14 | {:target :browser 15 | :module-hash-names true 16 | :asset-path "js" 17 | :build-hooks 18 | [(shadow.html/copy-file 19 | "resources/index.html" 20 | "public/index.html") 21 | (tech.thomas-sojka.shadow-tailwind.dev-hook/build-dev-css 22 | "resources/styles.css" 23 | "public/css/styles.css")] 24 | :modules {:main {:init-fn tech.thomas-sojka.hiccup-d3.app/init}}}}} 25 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/shadow_tailwind/dev_hook.clj: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.shadow-tailwind.dev-hook 2 | (:require [clojure.java.io :as io] 3 | [clojure.java.shell :as shell])) 4 | 5 | (defn build-dev-css 6 | {:shadow.build/stage :configure} 7 | [{:shadow.build/keys [mode] :as build-state} source target] 8 | (let [source-file (io/file source)] 9 | (io/make-parents target) 10 | (let [{:keys [exit err]} 11 | (shell/sh "npx" "postcss" source "-o" target 12 | :env (assoc (into {} (System/getenv)) "NODE_ENV" (if (= mode :release) "production" "")))] 13 | (when (= exit 1) 14 | (throw (Exception. err)))) 15 | (assoc build-state ::source-last-mod (.lastModified source-file)))) 16 | 17 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/voronoi.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.voronoi 2 | (:require ["d3" :as d3]) 3 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 4 | 5 | (def plain 6 | (m/build-chart 7 | "plain" 8 | (fn [data] 9 | (let [size 300 10 | delaunay (.from d3/Delaunay (clj->js data)) 11 | voronoi (.voronoi delaunay (into-array [0 0 size size]))] 12 | [:svg {:viewBox (str 0 " " 0 " " size " " size)} 13 | [:path {:fill "transparent" 14 | :stroke "black" 15 | :d (.render voronoi)}]])))) 16 | 17 | (def voronoi 18 | {:title "Voronoi" 19 | :load (fn [] (js/Promise.resolve (map (fn [] [(rand 300) (rand 300)]) (range 100)))) 20 | :charts [plain]}) 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hiccup-d3", 3 | "version": "0.0.1", 4 | "private": true, 5 | "devDependencies": { 6 | "autoprefixer": "^10.1.0", 7 | "cssnano": "^4.1.10", 8 | "husky": "^4.3.6", 9 | "lint-staged": "^10.5.3", 10 | "postcss": "^8.2.1", 11 | "postcss-cli": "^8.3.1", 12 | "shadow-cljs": "^2.11.11", 13 | "tailwindcss": "^2.0.2" 14 | }, 15 | "dependencies": { 16 | "clipboard": "^2.0.6", 17 | "d3": "^6.3.1", 18 | "d3-sankey": "^0.12.3", 19 | "react": "^17.0.1", 20 | "react-dom": "^17.0.1" 21 | }, 22 | "husky": { 23 | "hooks": { 24 | "pre-commit": "lint-staged" 25 | } 26 | }, 27 | "lint-staged": { 28 | "**/*": "clojure -Sdeps '{:deps {cljfmt {:mvn/version \"0.6.4\"}}}' -m cljfmt.main fix" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /public/data/population-by-age.json: -------------------------------------------------------------------------------- 1 | [ 2 | { "name": "<5", "value": 19912018 }, 3 | { "name": "5-9", "value": 20501982 }, 4 | { "name": "10-14", "value": 20679786 }, 5 | { "name": "15-19", "value": 21354481 }, 6 | { "name": "20-24", "value": 22604232 }, 7 | { "name": "25-29", "value": 21698010 }, 8 | { "name": "30-34", "value": 21183639 }, 9 | { "name": "35-39", "value": 19855782 }, 10 | { "name": "40-44", "value": 20796128 }, 11 | { "name": "45-49", "value": 21370368 }, 12 | { "name": "50-54", "value": 22525490 }, 13 | { "name": "55-59", "value": 21001947 }, 14 | { "name": "60-64", "value": 18415681 }, 15 | { "name": "65-69", "value": 14547446 }, 16 | { "name": "70-74", "value": 10587721 }, 17 | { "name": "75-79", "value": 7730129 }, 18 | { "name": "80-84", "value": 5811429 }, 19 | { "name": "≥85", "value": 5938752 } 20 | ] 21 | -------------------------------------------------------------------------------- /public/data/frequencies.json: -------------------------------------------------------------------------------- 1 | [{"letter":"A","frequency":0.08167},{"letter":"B","frequency":0.01492},{"letter":"C","frequency":0.02782},{"letter":"D","frequency":0.04253},{"letter":"E","frequency":0.12702},{"letter":"F","frequency":0.02288},{"letter":"G","frequency":0.02015},{"letter":"H","frequency":0.06094},{"letter":"I","frequency":0.06966},{"letter":"J","frequency":0.00153},{"letter":"K","frequency":0.00772},{"letter":"L","frequency":0.04025},{"letter":"M","frequency":0.02406},{"letter":"N","frequency":0.06749},{"letter":"O","frequency":0.07507},{"letter":"P","frequency":0.01929},{"letter":"Q","frequency":0.00095},{"letter":"R","frequency":0.05987},{"letter":"S","frequency":0.06327},{"letter":"T","frequency":0.09056},{"letter":"U","frequency":0.02758},{"letter":"V","frequency":0.00978},{"letter":"W","frequency":0.0236},{"letter":"X","frequency":0.0015},{"letter":"Y","frequency":0.01974},{"letter":"Z","frequency":0.00074}] -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/world_map.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.world-map 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [color (d3/scaleOrdinal d3/schemeCategory10) 11 | path (-> (d3/geoPath) 12 | (.projection (d3/geoMercator)))] 13 | [:svg {:viewBox (str 0 " " 0 " " 1000 " " 650)} 14 | [:g {:transform (str "translate(" 0 ", " 200 ")")} 15 | (map 16 | (fn [country] 17 | (let [country-name ^js (.-properties.abbrev country)] 18 | [:path {:key country-name 19 | :d (path country) 20 | :fill (color country-name)}])) 21 | ^js (.-features data))]])))) 22 | 23 | (def world-map 24 | {:title "World Map" 25 | :load (fn [] (-> (fetch-json "data/countries.json"))) 26 | :charts [plain]}) 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Thomas Sojka 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/contour.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.contour 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [path (d3/geoPath) 11 | color (-> (d3/scaleSequential d3/interpolateTurbo) 12 | (.domain (d3/extent (.-values data))) 13 | (.nice)) 14 | thresholds (.ticks color 20) 15 | width (.-width data) 16 | height (.-height data) 17 | contours (-> (d3/contours) 18 | (.size (into-array [width height])))] 19 | [:svg {:viewBox (str 0 " " 0 " " width " " height)} 20 | [:g 21 | (map 22 | (fn [threshold] 23 | [:path {:key threshold 24 | :d (path (.contour contours (.-values data) threshold)) 25 | :fill (color threshold)}]) 26 | thresholds)]])))) 27 | 28 | (def contour 29 | {:title "Contour" 30 | :load (fn [] (fetch-json "data/volcano.json")) 31 | :charts [plain]}) 32 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/tree.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.tree 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | r 2 12 | root ((-> (d3/tree) 13 | (.size (into-array [(- size (* 2 r)) (- size (* 2 r))]))) 14 | (-> (d3/hierarchy data))) 15 | draw-link (-> (d3/linkVertical) 16 | (.x (fn [d] (.-x d))) 17 | (.y (fn [d] (.-y d))))] 18 | [:svg {:viewBox (str (- r) " " (- r) " " size " " size)} 19 | [:g 20 | (map 21 | (fn [node] 22 | [:circle {:key ^js (.-data.name node) 23 | :cx (.-x node) 24 | :cy (.-y node) 25 | :r r}]) 26 | (.descendants root))] 27 | [:g 28 | (map-indexed 29 | (fn [idx link] 30 | [:path {:key idx 31 | :fill "transparent" 32 | :stroke "black" 33 | :d (draw-link link)}]) 34 | (.links root))]])))) 35 | 36 | (def tree 37 | {:title "Tree" 38 | :load (fn [] (-> (fetch-json "data/flare-2.json"))) 39 | :charts [plain]}) 40 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/sunburst.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.sunburst 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | arc (-> (d3/arc) 12 | (.startAngle (fn [d] (.-x0 d))) 13 | (.endAngle (fn [d] (.-x1 d))) 14 | (.innerRadius (fn [d] (.-y0 d))) 15 | (.outerRadius (fn [d] (- (.-y1 d) 1)))) 16 | radius (/ size 2) 17 | color (d3/scaleOrdinal d3/schemeCategory10) 18 | partition ((-> (d3/partition) 19 | (.size (into-array [(* 2 js/Math.PI) radius]))) 20 | (-> (d3/hierarchy data) 21 | (.sum (fn [d] (.-value d))) 22 | (.sort (fn [a b] (- (.-value b) (.-value a))))))] 23 | [:svg {:viewBox (str (- (/ size 2)) " " (- (/ size 2)) " " size " " size)} 24 | [:g 25 | (map 26 | (fn [d] 27 | [:path {:key ^js (.-data.name d) 28 | :d (arc d) 29 | :fill (color ^js (.-data.name d))}]) 30 | (.descendants partition))]])))) 31 | 32 | (def sunburst 33 | {:title "Sunburst" 34 | :load (fn [] (fetch-json "data/flare-2.json")) 35 | :charts [plain]}) 36 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | * [[https://rollacaster.github.io/hiccup-d3/][hiccup-d3]] 2 | [[https://rollacaster.github.io/hiccup-d3/][hiccup-d3]] provides [[https://d3js.org/][D3]] charts written in [[https://clojurescript.org/][ClojureScript]]. 3 | ** Usage 4 | This is not a library. Just copy [[https://rollacaster.github.io/hiccup-d3/][one of the examples]] as a starting point for your chart: https://rollacaster.github.io/hiccup-d3/. 5 | 6 | The example code assumes =D3= is already required. 7 | ** Rationale 8 | *** Transforming a [[https://observablehq.com/@d3/][D3 example from Observable]] to ClojureScript is repetitive work 9 | [[https://d3js.org/][D3]] can only process =JavaScript= data structures but to use the result you need to transform it into =Clojure= data structures. A common solution is to transform them into [[https://github.com/weavejester/hiccup][hiccup]]. Every time I start a new chart I repeat this task, to avoid this I created [[https://rollacaster.github.io/hiccup-d3/][hiccup-d3]] to have a common starting point for [[https://d3js.org/][D3]] charts. 10 | *** hiccup-d3 is no wrapper library 11 | Interop between [[https://clojurescript.org/][ClojureScript]] and JavaScript works well. Therefore, I did not want to create a wrapper which would add additional abstractions. Parts of [[https://d3js.org/][D3]] are written in an idiomatic Clojure style and focus on transforming data. Only those parts are part of [[https://rollacaster.github.io/hiccup-d3/][hiccup-d3]]. Maybe I'll try to write a library for the other parts in the future. 12 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/pack.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.pack 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | color (d3/scaleOrdinal d3/schemeCategory10) 12 | margin 7 13 | root ((-> (d3/pack) 14 | (.size (into-array [(- size margin) (- size margin)]))) 15 | (-> (d3/hierarchy data) 16 | (.sum (fn [d] (.-value d))) 17 | (.sort (fn [a b] (- (.-value b) (.-value a))))))] 18 | [:svg {:viewBox (str 0 " " 0 " " size " " size)} 19 | [:filter {:id "dropshadow" :filterUnits "userSpaceOnUse"} 20 | [:feGaussianBlur {:in "SourceAlpha" :stdDeviation "3"}] 21 | [:feOffset {:dx (/ margin 2) :dy (/ margin 2)}] 22 | [:feMerge 23 | [:feMergeNode] 24 | [:feMergeNode {:in "SourceGraphic"}]]] 25 | (map 26 | (fn [node] 27 | [:circle {:key ^js (.-data.name node) 28 | :cx (.-x node) :cy (.-y node) :r (.-r node) 29 | :fill (color (.-height node)) 30 | :filter "url(#dropshadow)"}]) 31 | (.descendants root))])))) 32 | 33 | (def pack 34 | {:title "Pack" 35 | :load (fn [] (-> (fetch-json "data/flare-2.json"))) 36 | :charts [plain]}) 37 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/graph.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.graph 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 600] 11 | (-> (d3/forceSimulation (.-nodes data)) 12 | (.force "link" (-> (d3/forceLink (.-links data)) 13 | (.id (fn [d] (.-id d))))) 14 | (.force "charge" (d3/forceManyBody)) 15 | (.force "center" (d3/forceCenter (/ size 2) (/ size 2))) 16 | .stop 17 | (.tick 1500)) 18 | [:svg {:viewBox (str "0 0 " size " " size)} 19 | [:g 20 | (map (fn [node] 21 | [:circle {:key (.-id node) 22 | :cx (.-x node) 23 | :cy (.-y node) 24 | :r 5}]) 25 | (.-nodes data))] 26 | [:g 27 | (map 28 | (fn [link] 29 | [:line {:key (.-index link) 30 | :x1 (.-x (.-source link)) 31 | :y1 (.-y (.-source link)) 32 | :x2 (.-x (.-target link)) 33 | :y2 (.-y (.-target link)) 34 | :stroke "black"}]) 35 | (.-links data))]])))) 36 | 37 | (def graph 38 | {:title "Graph" 39 | :load (fn [] (-> (fetch-json "data/miserables.json"))) 40 | :charts [plain]}) 41 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/treemap.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.treemap 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | color (d3/scaleOrdinal d3/schemeCategory10) 12 | root ((-> (d3/treemap) 13 | (.tile d3/treemapBinary) 14 | (.size (into-array [size size]))) 15 | (-> (d3/hierarchy data) 16 | (.sum (fn [d] (.-value d))) 17 | (.sort (fn [a b] (- (.-value b) (.-value a))))))] 18 | [:svg {:viewBox (str 0 " " 0 " " size " " size)} 19 | [:g 20 | (->> (.leaves root) 21 | (map (fn [d] 22 | (let [parent-name (loop [d d] 23 | (if (> (.-depth d) 1) 24 | (recur (.-parent d)) 25 | ^js (.-data.name d)))] 26 | [:rect {:key ^js (.-data.name d) 27 | :x (.-x0 d) :y (.-y0 d) 28 | :width (- (.-x1 d) (.-x0 d)) 29 | :height (- (.-y1 d) (.-y0 d)) 30 | :stroke "black" 31 | :fill (color parent-name)}]))))]])))) 32 | 33 | (def treemap 34 | {:title "Treemap" 35 | :load (fn [] (-> (fetch-json "data/flare-2.json"))) 36 | :charts [plain]}) 37 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/line.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.line 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [csv->clj]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | dates (map :date data) 12 | values (map :close data) 13 | x (-> (d3/scaleUtc) 14 | (.domain (into-array [(apply min dates) (apply max dates)])) 15 | (.range (into-array [0 size]))) 16 | y (-> (d3/scaleLinear) 17 | (.domain (into-array [0 (apply max values)])) 18 | (.range (into-array [size 0]))) 19 | line (-> (d3/line) 20 | (.x (fn [d] (x (:date d)))) 21 | (.y (fn [d] (y (:close d)))))] 22 | [:svg {:viewBox (str 0 " " 0 " " size " " size)} 23 | [:path {:d (line data) 24 | :fill "transparent" 25 | :stroke (first d3/schemeCategory10)}]])))) 26 | 27 | (def line 28 | {:title "Line" 29 | :load (fn [] 30 | (let [parse-stock-data (fn [stock-data] 31 | (-> stock-data 32 | (update :date #(js/Date. %)) 33 | (update :close js/parseFloat)))] 34 | (-> (js/fetch "data/apple-stock.csv") 35 | (.then (fn [res] (.text res))) 36 | (.then (fn [res] (->> res 37 | csv->clj 38 | (map parse-stock-data))))))) 39 | :charts [plain]}) 40 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/chord.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.chord 2 | (:require ["d3" :as d3]) 3 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 4 | 5 | (def plain 6 | (m/build-chart 7 | "plain" 8 | (fn [data] 9 | (let [size 300 10 | radius (/ size 2) 11 | innerRadius (- radius 10) 12 | color (d3/scaleOrdinal d3/schemeCategory10) 13 | ribbon (-> (d3/ribbon) 14 | (.radius (- innerRadius 1)) 15 | (.padAngle (/ 1 innerRadius))) 16 | arc (-> (d3/arc) 17 | (.innerRadius innerRadius) 18 | (.outerRadius radius)) 19 | chord (-> (d3/chord) 20 | (.sortSubgroups d3/descending) 21 | (.sortChords d3/descending))] 22 | [:svg {:viewBox (str (- radius) " " (- radius) " " size " " size)} 23 | [:g 24 | (map-indexed 25 | (fn [idx link] 26 | [:path {:key idx :d (ribbon link) :fill (color ^js (.-source.index link))}]) 27 | (chord data))] 28 | [:g 29 | (map 30 | (fn [group] 31 | [:path {:d (arc group) :fill (color (.-index group)) :key (.-index group)}]) 32 | (.-groups (chord data)))]])))) 33 | 34 | (def chord 35 | {:title "Chord" 36 | :load (fn [] (js/Promise.resolve 37 | (clj->js 38 | [[0.096899, 0.008859, 0.000554, 0.004430, 0.025471, 0.024363, 0.005537, 0.025471], 39 | [0.001107, 0.018272, 0.000000, 0.004983, 0.011074, 0.010520, 0.002215, 0.004983], 40 | [0.000554, 0.002769, 0.002215, 0.002215, 0.003876, 0.008306, 0.000554, 0.003322], 41 | [0.000554, 0.001107, 0.000554, 0.012182, 0.011628, 0.006645, 0.004983, 0.010520], 42 | [0.002215, 0.004430, 0.000000, 0.002769, 0.104097, 0.012182, 0.004983, 0.028239], 43 | [0.011628, 0.026024, 0.000000, 0.013843, 0.087486, 0.168328, 0.017165, 0.055925], 44 | [0.000554, 0.004983, 0.000000, 0.003322, 0.004430, 0.008859, 0.017719, 0.004430], 45 | [0.002215, 0.007198, 0.000000, 0.003322, 0.016611, 0.014950, 0.001107, 0.054264]]))) 46 | :charts [plain]}) 47 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/sankey.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.sankey 2 | (:require ["d3" :as d3] 3 | ["d3-sankey" :as d3-sankey] 4 | [clojure.string :as str] 5 | [tech.thomas-sojka.hiccup-d3.utils :refer [csv->clj]]) 6 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 7 | 8 | (def plain 9 | (m/build-chart 10 | "plain" 11 | (fn [data] 12 | (let [size 300 13 | color (d3/scaleOrdinal d3/schemeCategory10) 14 | nodes (fn [links] 15 | (->> links 16 | (mapcat (fn [{:keys [source target]}] [source target])) 17 | distinct 18 | (map (fn [name] {:name name :category (str/replace name #" .*" "")})))) 19 | data (clj->js {:links data :nodes (nodes data)}) 20 | compute-sankey (-> (d3-sankey/sankey) 21 | (.nodeId (fn [d] (.-name d))) 22 | (.size (into-array [size size]))) 23 | sankey-data (compute-sankey data)] 24 | [:svg {:viewBox (str "0 0 " size " " size)} 25 | [:g 26 | (map (fn [node] 27 | [:rect {:key (.-name node) 28 | :height (- (.-y1 node) (.-y0 node)) 29 | :width (- (.-x1 node) (.-x0 node)) 30 | :x (.-x0 node) 31 | :y (.-y0 node) 32 | :fill (color ^js (.-category node))}]) 33 | (.-nodes sankey-data))] 34 | [:g 35 | (map 36 | (fn [link] 37 | [:path {:key (.-index link) 38 | :d ((d3-sankey/sankeyLinkHorizontal) link) 39 | :stroke-width (.-width link) 40 | :stroke (color (.-source.name ^js link)) 41 | :opacity 0.5 42 | :fill "transparent"}]) 43 | (.-links sankey-data))]])))) 44 | 45 | (def sankey 46 | {:title "Sankey" 47 | :load (fn [] 48 | (-> (js/fetch "data/energy.csv") 49 | (.then (fn [res] (.text res))) 50 | (.then (fn [res] (->> res 51 | csv->clj 52 | (map #(update % :value js/parseFloat))))) 53 | (.catch (fn [res] (prn res))))) 54 | :charts [plain]}) 55 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/pie.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.pie 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | pie (-> (d3/pie) 12 | (.sort nil) 13 | (.value (fn [d] (:value d)))) 14 | arc (-> (d3/arc) 15 | (.innerRadius 0) 16 | (.outerRadius (/ size 2))) 17 | color (d3/scaleOrdinal d3/schemeCategory10) 18 | arcs (pie data)] 19 | [:svg {:viewBox (str (- (/ size 2)) " " (- (/ size 2)) " " size " " size)} 20 | (map 21 | (fn [pie-arc] 22 | [:g {:key (.-index pie-arc)} 23 | [:path {:d (arc pie-arc) :fill (color (.-index pie-arc))}]]) 24 | arcs)])))) 25 | 26 | (def with-labels 27 | (m/build-chart 28 | "with labels" 29 | (fn [data] 30 | (let [size 300 31 | pie (-> (d3/pie) 32 | (.sort nil) 33 | (.value (fn [d] (:value d)))) 34 | arc (-> (d3/arc) 35 | (.innerRadius 0) 36 | (.outerRadius (/ size 2))) 37 | arc-label (let [r (* (/ size 2) 0.8)] 38 | (-> (d3/arc) 39 | (.innerRadius r) 40 | (.outerRadius r))) 41 | color (d3/scaleOrdinal d3/schemeCategory10) 42 | arcs (pie data)] 43 | [:svg {:viewBox (str (- (/ size 2)) " " (- (/ size 2)) " " size " " size)} 44 | (map 45 | (fn [pie-arc] 46 | [:g {:key (.-index pie-arc)} 47 | [:path {:d (arc pie-arc) :fill (color (.-index pie-arc))}] 48 | (when (> (- ^js (.-endAngle pie-arc) ^js (.-startAngle pie-arc)) 0.3) 49 | [:text 50 | {:transform (str "translate(" (.centroid arc-label pie-arc) ")") 51 | :text-anchor "middle" 52 | :dominant-baseline "middle"} 53 | (:name (.-data pie-arc))])]) 54 | arcs)])))) 55 | 56 | (def pie 57 | {:title "Pie" 58 | :load (fn [] 59 | (-> (fetch-json "data/population-by-age.json") 60 | (.then (fn [res] (js->clj res :keywordize-keys true))))) 61 | :charts [plain with-labels]}) 62 | -------------------------------------------------------------------------------- /public/data/energy.csv: -------------------------------------------------------------------------------- 1 | source,target,value 2 | Agricultural 'waste',Bio-conversion,124.729 3 | Bio-conversion,Liquid,0.597 4 | Bio-conversion,Losses,26.862 5 | Bio-conversion,Solid,280.322 6 | Bio-conversion,Gas,81.144 7 | Biofuel imports,Liquid,35 8 | Biomass imports,Solid,35 9 | Coal imports,Coal,11.606 10 | Coal reserves,Coal,63.965 11 | Coal,Solid,75.571 12 | District heating,Industry,10.639 13 | District heating,Heating and cooling - commercial,22.505 14 | District heating,Heating and cooling - homes,46.184 15 | Electricity grid,Over generation / exports,104.453 16 | Electricity grid,Heating and cooling - homes,113.726 17 | Electricity grid,H2 conversion,27.14 18 | Electricity grid,Industry,342.165 19 | Electricity grid,Road transport,37.797 20 | Electricity grid,Agriculture,4.412 21 | Electricity grid,Heating and cooling - commercial,40.858 22 | Electricity grid,Losses,56.691 23 | Electricity grid,Rail transport,7.863 24 | Electricity grid,Lighting & appliances - commercial,90.008 25 | Electricity grid,Lighting & appliances - homes,93.494 26 | Gas imports,Ngas,40.719 27 | Gas reserves,Ngas,82.233 28 | Gas,Heating and cooling - commercial,0.129 29 | Gas,Losses,1.401 30 | Gas,Thermal generation,151.891 31 | Gas,Agriculture,2.096 32 | Gas,Industry,48.58 33 | Geothermal,Electricity grid,7.013 34 | H2 conversion,H2,20.897 35 | H2 conversion,Losses,6.242 36 | H2,Road transport,20.897 37 | Hydro,Electricity grid,6.995 38 | Liquid,Industry,121.066 39 | Liquid,International shipping,128.69 40 | Liquid,Road transport,135.835 41 | Liquid,Domestic aviation,14.458 42 | Liquid,International aviation,206.267 43 | Liquid,Agriculture,3.64 44 | Liquid,National navigation,33.218 45 | Liquid,Rail transport,4.413 46 | Marine algae,Bio-conversion,4.375 47 | Ngas,Gas,122.952 48 | Nuclear,Thermal generation,839.978 49 | Oil imports,Oil,504.287 50 | Oil reserves,Oil,107.703 51 | Oil,Liquid,611.99 52 | Other waste,Solid,56.587 53 | Other waste,Bio-conversion,77.81 54 | Pumped heat,Heating and cooling - homes,193.026 55 | Pumped heat,Heating and cooling - commercial,70.672 56 | Solar PV,Electricity grid,59.901 57 | Solar Thermal,Heating and cooling - homes,19.263 58 | Solar,Solar Thermal,19.263 59 | Solar,Solar PV,59.901 60 | Solid,Agriculture,0.882 61 | Solid,Thermal generation,400.12 62 | Solid,Industry,46.477 63 | Thermal generation,Electricity grid,525.531 64 | Thermal generation,Losses,787.129 65 | Thermal generation,District heating,79.329 66 | Tidal,Electricity grid,9.452 67 | UK land based bioenergy,Bio-conversion,182.01 68 | Wave,Electricity grid,19.013 69 | Wind,Electricity grid,289.366 70 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/bar.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.bar 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [fetch-json]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 400 11 | x (-> (d3/scaleLinear) 12 | (.range (into-array [0 size])) 13 | (.domain (into-array [0 (apply max (map :frequency data))]))) 14 | y (-> (d3/scaleBand) 15 | (.domain (into-array (map :letter data))) 16 | (.range (into-array [0 size]))) 17 | color (d3/scaleOrdinal d3/schemeCategory10)] 18 | [:svg {:viewBox (str "0 0 " size " " size)} 19 | (map 20 | (fn [{:keys [letter frequency]}] 21 | [:g {:key letter :transform (str "translate(" 0 "," (y letter) ")")} 22 | [:rect {:x (x 0) 23 | :height (.bandwidth y) 24 | :fill (color letter) 25 | :width (x frequency)}]]) 26 | data)])))) 27 | 28 | (def with-labels 29 | (m/build-chart 30 | "with labels" 31 | (fn [data] 32 | (let [size 400 33 | margin {:top 0 :right 0 :left 16 :bottom 0} 34 | x (-> (d3/scaleLinear) 35 | (.range (into-array [(:left margin) (- size (:right margin))])) 36 | (.domain (into-array [0 (apply max (map :frequency data))]))) 37 | y (-> (d3/scaleBand) 38 | (.domain (into-array (map :letter data))) 39 | (.range (into-array [(:top margin) (- size (:bottom margin))]))) 40 | color (d3/scaleOrdinal d3/schemeCategory10)] 41 | [:svg {:viewBox (str "0 0 " size " " size)} 42 | (map 43 | (fn [{:keys [letter frequency]}] 44 | [:g {:key letter :transform (str "translate(" 0 "," (y letter) ")")} 45 | [:rect {:x (x 0) 46 | :height (.bandwidth y) 47 | :fill (color letter) 48 | :width (x frequency)}]]) 49 | data) 50 | (map 51 | (fn [{:keys [letter frequency]}] 52 | [:g {:key letter :transform (str "translate(" 0 "," (y letter) ")")} 53 | [:text {:x 20 54 | :y (+ (/ (.bandwidth y) 2) 1) 55 | :dominant-baseline "middle"} 56 | frequency] 57 | [:text.current-fill 58 | {:x 0 :y (/ (.bandwidth y) 2) :dominant-baseline "middle"} 59 | letter]]) 60 | data)])))) 61 | 62 | (def bar 63 | {:title "Bar" 64 | :load (fn [] 65 | (-> (fetch-json "data/frequencies.json") 66 | (.then (fn [res] (js->clj res :keywordize-keys true))))) 67 | :charts [plain with-labels]}) 68 | -------------------------------------------------------------------------------- /resources/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | hiccup-d3 10 | 11 | 12 | 13 | 14 | 15 | 72 |
73 | 74 | 75 | 76 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/macros.clj: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.macros 2 | (:require [clojure.pprint :refer [pprint]] 3 | [clojure.string :as str] 4 | [clojure.walk :as walk] 5 | [glow.core :as glow] 6 | [markdown-to-hiccup.core :as m])) 7 | 8 | (def doc-hiccup 9 | (-> "https://raw.githubusercontent.com/d3/d3/master/API.md" 10 | slurp 11 | (m/md->hiccup))) 12 | 13 | (defn find-call-in-doc-item [call doc-item] 14 | (and (string? doc-item) 15 | (str/includes? doc-item call) 16 | (= call 17 | (last 18 | (re-matches 19 | #"^https:\/\/github\.com\/d3\/.*\/blob\/v.*\/README\.md#(.*)$" 20 | doc-item))))) 21 | 22 | (defn d3-doc-link [call] 23 | (cond 24 | (= call "sankey") "https://github.com/d3/d3-sankey#_sankey" 25 | (= call "sankeyLinkHorizontal") "https://github.com/d3/d3-sankey#sankeyLinkHorizontal" 26 | :else 27 | (let [d3-api (atom nil)] 28 | (walk/postwalk 29 | (fn [doc-item] 30 | (when (find-call-in-doc-item (case call 31 | "Delaunay" "new_Delaunay" 32 | call) 33 | doc-item) 34 | (reset! d3-api doc-item))) 35 | doc-hiccup) 36 | @d3-api))) 37 | 38 | (defn d3-fns [code] 39 | (let [d3-calls (atom [])] 40 | (walk/postwalk 41 | (fn [item] 42 | (when (and (symbol? item) (str/includes? item "d3")) 43 | (swap! d3-calls conj (name item)))) 44 | code) 45 | (set @d3-calls))) 46 | 47 | (defmacro build-chart [title code] 48 | `{:title ~title 49 | :d3-apis ~(mapv (fn [fn] {:doc-link (d3-doc-link fn) :fn fn}) (d3-fns code)) 50 | :code-formatted ~(glow/highlight-html (with-out-str (pprint (last code)))) 51 | :chart (fn [data#] (~code data#))}) 52 | 53 | (spit "public/css/glow.css" (glow/generate-css 54 | {:background "white" 55 | :exception "#859900" 56 | :repeat "#859900" 57 | :conditional "#859900" 58 | :variable "#268bd2" 59 | :core-fn "#586e75" 60 | :definition "#cb4b16" 61 | :reader-char "#dc322f" 62 | :special-form "#859900" 63 | :macro "#859900" 64 | :number "#2aa198" 65 | :boolean "#2aa198" 66 | :nil "#2aa198" 67 | :s-exp "#586e75" 68 | :keyword "#268bd2" 69 | :comment "#586e75" 70 | :string "#2aa198" 71 | :character "#2aa198" 72 | :regex "#dc322f" 73 | :symbol "#586e75"})) 74 | 75 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/charts/streamgraph.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.charts.streamgraph 2 | (:require ["d3" :as d3] 3 | [tech.thomas-sojka.hiccup-d3.utils :refer [csv->clj]]) 4 | (:require-macros [tech.thomas-sojka.hiccup-d3.macros :as m])) 5 | 6 | (def plain 7 | (m/build-chart 8 | "plain" 9 | (fn [data] 10 | (let [size 300 11 | data-keys (remove #{"date"} (map name (keys (first data)))) 12 | create-series (-> (d3/stack) 13 | (.keys data-keys) 14 | (.offset d3/stackOffsetWiggle) 15 | (.order d3/stackOrderInsideOut)) 16 | series (create-series (clj->js data)) 17 | dates (map :date data) 18 | x (-> (d3/scaleUtc) 19 | (.domain (into-array [(apply min dates) (apply max dates)])) 20 | (.range (into-array [0 size]))) 21 | y (-> (d3/scaleLinear) 22 | (.domain 23 | (into-array 24 | [(apply min (map (fn [d] (apply min (map first d))) series)) 25 | (apply max (map (fn [d] (apply max (map last d))) series))])) 26 | (.range (into-array [0 size]))) 27 | area (-> (d3/area) 28 | (.x (fn [d] (x ^js (.-data.date d)))) 29 | (.y0 (fn [[y0]] (y y0))) 30 | (.y1 (fn [[_ y1]] (y y1)))) 31 | color (-> (d3/scaleOrdinal) 32 | (.domain (clj->js data-keys)) 33 | (.range d3/schemeCategory10))] 34 | [:svg {:viewBox (str 0 " " 0 " " size " " size)} 35 | (map 36 | (fn [d] [:path {:key (.-index d) :d (area d) :fill (color (.-key d))}]) 37 | series)])))) 38 | 39 | (def streamgraph 40 | {:title "Streamgraph" 41 | :load (let [parse-unemployment-data 42 | (fn [employment-data] 43 | (-> employment-data 44 | (update :date #(js/Date. %)) 45 | (update :MiningandExtraction js/parseFloat) 46 | (update :Finance js/parseFloat) 47 | (update :Leisureandhospitality js/parseFloat) 48 | (update :Businessservices js/parseFloat) 49 | (update :WholesaleandRetailTrade js/parseFloat) 50 | (update :Construction js/parseFloat) 51 | (update :Manufacturing js/parseFloat) 52 | (update :Information js/parseFloat) 53 | (update :Agriculture js/parseFloat) 54 | (update :Other js/parseFloat) 55 | (update :EducationandHealth js/parseFloat) 56 | (update :TransportationandUtilities js/parseFloat) 57 | (update :Self-employed js/parseFloat) 58 | (update :Government js/parseFloat)))] 59 | (fn [] (-> (js/fetch "data/unemployment.csv") 60 | (.then (fn [res] (.text res))) 61 | (.then (fn [res] (->> res 62 | csv->clj 63 | (map parse-unemployment-data))))))) 64 | :charts [plain]}) 65 | -------------------------------------------------------------------------------- /public/data/unemployment.csv: -------------------------------------------------------------------------------- 1 | date,Wholesale and Retail Trade,Manufacturing,Leisure and hospitality,Business services,Construction,Education and Health,Government,Finance,Self-employed,Other,Transportation and Utilities,Information,Agriculture,Mining and Extraction 2 | 2000-01-01,1000,734,782,655,745,353,430,228,239,274,236,125,154,19 3 | 2000-02-01,1023,694,779,587,812,349,409,240,262,232,223,112,173,25 4 | 2000-03-01,983,739,789,623,669,381,311,226,213,247,192,140,152,17 5 | 2000-04-01,793,736,658,517,447,329,269,197,218,240,191,95,135,20 6 | 2000-05-01,821,685,675,561,397,423,370,195,206,254,190,131,73,27 7 | 2000-06-01,837,621,833,545,389,452,603,216,188,225,183,102,109,13 8 | 2000-07-01,792,708,786,636,384,478,545,190,222,202,228,144,77,16 9 | 2000-08-01,853,685,675,584,446,450,583,213,186,187,198,143,110,23 10 | 2000-09-01,791,667,636,559,386,398,408,187,213,220,231,130,124,25 11 | 2000-10-01,739,693,691,504,417,339,391,224,226,161,153,96,113,39 12 | 2000-11-01,701,672,694,547,482,351,384,184,273,217,129,117,192,11 13 | 2000-12-01,715,653,639,564,580,293,365,200,178,167,168,151,196,20 14 | 2001-01-01,908,911,806,734,836,428,463,232,194,197,194,161,188,11 15 | 2001-02-01,990,902,821,724,826,423,298,235,209,243,189,109,193,27 16 | 2001-03-01,1037,954,817,652,683,456,355,211,181,200,193,148,267,14 17 | 2001-04-01,820,855,744,655,596,341,369,232,216,220,232,148,140,24 18 | 2001-05-01,875,903,731,652,478,390,361,191,206,172,178,164,109,34 19 | 2001-06-01,955,956,821,694,443,476,525,249,187,246,242,163,130,26 20 | 2001-07-01,833,1054,813,731,447,513,548,289,191,228,236,206,113,17 21 | 2001-08-01,928,1023,767,790,522,595,540,256,243,241,226,210,141,18 22 | 2001-09-01,936,996,900,810,489,455,438,268,256,225,214,219,101,23 23 | 2001-10-01,941,1065,903,910,535,486,429,281,247,239,321,233,118,32 24 | 2001-11-01,1046,1108,935,946,670,516,420,320,234,256,302,241,145,20 25 | 2001-12-01,1074,1172,938,921,785,483,419,258,249,277,310,275,192,27 26 | 2002-01-01,1212,1377,947,1120,1211,586,486,267,263,304,368,263,195,33 27 | 2002-02-01,1264,1296,973,973,1060,590,508,318,250,339,331,279,187,35 28 | 2002-03-01,1269,1367,976,964,1009,540,477,287,217,314,313,266,269,28 29 | 2002-04-01,1222,1322,953,951,855,493,447,292,255,268,280,257,151,33 30 | 2002-05-01,1138,1194,1022,983,626,533,484,340,264,264,257,260,89,25 31 | 2002-06-01,1240,1187,1034,1079,593,638,561,373,246,335,274,255,89,35 32 | 2002-07-01,1132,1185,999,1075,594,671,645,345,249,356,270,264,114,19 33 | 2002-08-01,1170,1108,884,926,654,660,596,343,271,353,221,270,125,32 34 | 2002-09-01,1171,1076,885,1007,615,562,530,299,266,281,235,231,92,42 35 | 2002-10-01,1212,1046,956,962,680,517,499,312,275,272,262,211,97,36 36 | 2002-11-01,1242,1115,978,1029,758,493,468,337,297,284,233,220,137,32 37 | 2002-12-01,1150,1188,922,1038,941,558,446,322,327,241,243,255,120,45 38 | 2003-01-01,1342,1302,1049,1112,1196,559,571,327,324,304,331,243,159,54 39 | 2003-02-01,1238,1229,1145,1140,1173,576,483,310,304,331,316,321,172,41 40 | 2003-03-01,1179,1222,1035,1190,987,518,526,357,279,370,319,267,161,46 41 | 2003-04-01,1201,1199,986,1076,772,611,440,323,248,331,274,268,154,41 42 | 2003-05-01,1247,1150,955,1105,715,618,478,320,271,339,260,251,133,40 43 | 2003-06-01,1434,1232,1048,1092,710,769,704,358,295,359,300,239,94,36 44 | 2003-07-01,1387,1193,1020,1021,677,697,749,284,270,405,289,224,113,43 45 | 2003-08-01,1161,1186,1050,881,650,760,745,342,302,373,255,224,173,20 46 | 2003-09-01,1229,1175,978,975,681,649,556,305,287,338,255,248,98,25 47 | 2003-10-01,1189,1041,933,1014,651,639,500,303,338,378,260,182,136,31 48 | 2003-11-01,1156,1034,990,948,690,662,542,311,308,357,275,257,148,34 49 | 2003-12-01,1081,1025,885,948,813,620,516,283,299,278,267,224,137,32 50 | 2004-01-01,1389,1110,1097,1070,994,662,511,403,302,322,243,236,184,31 51 | 2004-02-01,1369,1094,987,964,1039,608,490,363,260,366,291,194,168,24 52 | 2004-03-01,1386,1083,1039,999,1011,584,530,343,260,366,284,216,153,22 53 | 2004-04-01,1248,1004,925,752,849,589,433,312,242,347,239,168,107,34 54 | 2004-05-01,1183,966,977,819,665,570,468,302,287,310,230,190,99,22 55 | 2004-06-01,1182,957,1189,814,668,769,580,335,306,326,227,172,106,27 56 | 2004-07-01,1163,1019,965,790,610,725,741,307,291,346,231,174,140,28 57 | 2004-08-01,1079,840,1010,845,563,647,676,312,324,341,236,191,103,10 58 | 2004-09-01,1127,852,854,750,629,593,568,374,362,301,208,178,88,8 59 | 2004-10-01,1138,884,853,781,635,526,561,358,301,300,219,185,102,15 60 | 2004-11-01,1045,905,916,872,695,570,514,290,353,294,217,187,131,20 61 | 2004-12-01,1058,872,850,875,870,562,499,290,341,276,204,173,165,16 62 | 2005-01-01,1302,889,993,958,1079,613,555,252,346,290,276,168,153,29 63 | 2005-02-01,1301,889,1008,916,1150,619,472,301,363,325,245,204,107,25 64 | 2005-03-01,1173,879,967,807,961,614,468,261,312,308,267,177,139,32 65 | 2005-04-01,1131,793,882,714,693,591,478,255,273,306,257,178,84,19 66 | 2005-05-01,1145,743,944,730,567,648,453,288,299,314,223,145,66,16 67 | 2005-06-01,1197,743,950,743,559,667,681,307,268,291,247,160,76,25 68 | 2005-07-01,1194,883,929,804,509,635,683,309,282,274,222,142,69,22 69 | 2005-08-01,1130,767,844,728,561,644,664,300,249,306,187,156,100,12 70 | 2005-09-01,1038,775,842,862,572,658,568,260,282,307,211,168,127,12 71 | 2005-10-01,1050,800,796,748,519,628,502,255,255,319,251,162,85,2 72 | 2005-11-01,1013,823,966,711,564,677,494,268,319,300,199,172,118,18 73 | 2005-12-01,968,757,930,788,813,529,393,204,327,269,202,128,127,23 74 | 2006-01-01,1203,778,910,825,868,593,457,233,341,308,287,105,140,26 75 | 2006-02-01,1141,821,1040,841,836,528,472,268,332,281,260,119,139,25 76 | 2006-03-01,1022,701,917,824,820,563,461,298,300,292,263,116,117,14 77 | 2006-04-01,972,745,882,644,674,558,414,293,334,266,272,132,81,17 78 | 2006-05-01,1025,680,830,695,647,543,429,289,251,265,226,158,79,20 79 | 2006-06-01,1085,635,942,753,569,617,578,299,245,265,225,114,35,31 80 | 2006-07-01,1083,736,867,735,633,659,659,329,291,305,237,103,55,25 81 | 2006-08-01,977,680,855,681,618,611,595,263,306,341,217,132,76,32 82 | 2006-09-01,1008,632,810,736,586,576,396,235,299,310,183,170,78,14 83 | 2006-10-01,972,618,795,768,456,531,424,211,275,268,206,116,77,15 84 | 2006-11-01,1018,702,836,658,618,536,400,229,257,306,183,137,125,22 85 | 2006-12-01,965,660,701,791,725,502,395,227,287,306,190,108,139,25 86 | 2007-01-01,1166,752,911,885,922,563,476,233,376,275,248,143,128,35 87 | 2007-02-01,1045,774,879,825,1086,489,405,295,300,257,251,139,127,33 88 | 2007-03-01,896,742,845,775,924,495,419,252,311,222,249,109,123,24 89 | 2007-04-01,872,749,822,689,853,555,408,231,240,224,188,77,67,17 90 | 2007-05-01,795,651,831,743,676,622,428,281,276,242,216,110,64,22 91 | 2007-06-01,979,653,917,722,600,653,572,303,258,256,242,114,59,33 92 | 2007-07-01,1089,621,920,743,617,665,704,307,324,243,309,112,40,33 93 | 2007-08-01,1028,596,877,683,558,648,695,371,315,239,205,140,54,33 94 | 2007-09-01,1027,673,892,655,596,630,525,316,304,257,224,124,53,25 95 | 2007-10-01,907,729,911,675,641,534,492,307,338,182,218,120,47,9 96 | 2007-11-01,893,762,986,679,645,526,482,261,336,255,242,132,80,16 97 | 2007-12-01,1009,772,961,803,968,521,451,315,326,235,210,125,96,24 98 | 2008-01-01,1120,837,1176,893,1099,576,471,285,338,264,271,169,113,28 99 | 2008-02-01,1007,820,1056,866,1118,562,372,323,340,313,289,193,135,16 100 | 2008-03-01,992,831,944,876,1170,609,425,323,346,283,267,155,175,28 101 | 2008-04-01,919,796,874,736,1057,551,373,324,338,251,245,143,108,28 102 | 2008-05-01,1049,879,1074,829,809,619,461,361,366,275,269,170,94,28 103 | 2008-06-01,1160,862,1154,890,785,669,654,337,364,322,329,157,86,28 104 | 2008-07-01,1329,908,1172,866,783,776,770,350,345,352,359,141,125,13 105 | 2008-08-01,1366,960,1122,961,814,844,721,409,378,412,309,144,111,17 106 | 2008-09-01,1277,984,1029,951,970,835,573,380,414,374,337,166,84,25 107 | 2008-10-01,1313,1007,1126,1052,1078,797,552,434,396,334,316,168,97,15 108 | 2008-11-01,1397,1144,1283,992,1237,748,527,494,411,434,331,173,119,32 109 | 2008-12-01,1535,1315,1210,1147,1438,791,511,540,559,367,421,219,229,46 110 | 2009-01-01,1794,1711,1487,1445,1744,792,652,571,659,431,522,232,245,59 111 | 2009-02-01,1847,1822,1477,1512,2025,847,563,637,586,453,563,224,251,63 112 | 2009-03-01,1852,1912,1484,1597,1979,931,598,639,625,377,558,252,241,105 113 | 2009-04-01,1833,1968,1322,1448,1737,964,575,561,488,403,541,320,176,125 114 | 2009-05-01,1835,2010,1599,1514,1768,1005,702,536,530,476,506,303,136,98 115 | 2009-06-01,1863,2010,1688,1580,1601,1267,991,513,472,557,499,347,182,100 116 | 2009-07-01,1854,1988,1600,1531,1687,1269,1129,570,552,490,511,373,180,95 117 | 2009-08-01,1794,1866,1636,1560,1542,1239,1118,566,569,528,547,358,195,93 118 | 2009-09-01,1809,1876,1469,1596,1594,1257,928,657,636,462,538,362,150,76 119 | 2009-10-01,1919,1884,1604,1488,1744,1280,785,646,610,541,480,261,166,84 120 | 2009-11-01,1879,1882,1524,1514,1780,1168,748,619,592,491,493,243,180,96 121 | 2009-12-01,1851,1747,1624,1486,2044,1183,797,665,609,513,539,256,292,89 122 | 2010-01-01,2154,1918,1804,1614,2194,1175,948,623,730,609,657,313,318,68 123 | 2010-02-01,2071,1814,1597,1740,2440,1200,880,708,680,603,591,300,285,79 124 | -------------------------------------------------------------------------------- /src/main/tech/thomas_sojka/hiccup_d3/app.cljs: -------------------------------------------------------------------------------- 1 | (ns tech.thomas-sojka.hiccup-d3.app 2 | (:require ["clipboard" :as clipboard] 3 | [cljs.pprint :refer [pprint]] 4 | [reagent.core :as r] 5 | [reagent.dom :as dom] 6 | [tech.thomas-sojka.hiccup-d3.charts.bar :refer [bar]] 7 | [tech.thomas-sojka.hiccup-d3.charts.pie :refer [pie]] 8 | [tech.thomas-sojka.hiccup-d3.charts.pack :refer [pack]] 9 | [tech.thomas-sojka.hiccup-d3.charts.tree :refer [tree]] 10 | [tech.thomas-sojka.hiccup-d3.charts.world-map :refer [world-map]] 11 | [tech.thomas-sojka.hiccup-d3.charts.sankey :refer [sankey]] 12 | [tech.thomas-sojka.hiccup-d3.charts.sunburst :refer [sunburst]] 13 | [tech.thomas-sojka.hiccup-d3.charts.graph :refer [graph]] 14 | [tech.thomas-sojka.hiccup-d3.charts.line :refer [line]] 15 | [tech.thomas-sojka.hiccup-d3.charts.treemap :refer [treemap]] 16 | [tech.thomas-sojka.hiccup-d3.charts.chord :refer [chord]] 17 | [tech.thomas-sojka.hiccup-d3.charts.voronoi :refer [voronoi]] 18 | [tech.thomas-sojka.hiccup-d3.charts.streamgraph :refer [streamgraph]] 19 | [tech.thomas-sojka.hiccup-d3.charts.contour :refer [contour]])) 20 | 21 | (defn icon [{:keys [name class]}] 22 | [:svg.fill-current {:viewBox "0 0 24 24" :class class} 23 | [:path {:d (case name 24 | :chart "M5 19h-4v-4h4v4zm6 0h-4v-8h4v8zm6 0h-4v-13h4v13zm6 0h-4v-19h4v19zm1 2h-24v2h24v-2z" 25 | :code "M24 10.935v2.131l-8 3.947v-2.23l5.64-2.783-5.64-2.79v-2.223l8 3.948zm-16 3.848l-5.64-2.783 5.64-2.79v-2.223l-8 3.948v2.131l8 3.947v-2.23zm7.047-10.783h-2.078l-4.011 16h2.073l4.016-16z" 26 | :data "M13 6c3.469 0 2 5 2 5s5-1.594 5 2v9h-12v-16h5zm.827-2h-7.827v20h16v-11.842c0-2.392-5.011-8.158-8.173-8.158zm.173-2l-3-2h-9v22h2v-20h10z" 27 | :copy "M22 2v22h-20v-22h3c1.23 0 2.181-1.084 3-2h8c.82.916 1.771 2 3 2h3zm-11 1c0 .552.448 1 1 1 .553 0 1-.448 1-1s-.447-1-1-1c-.552 0-1 .448-1 1zm9 1h-4l-2 2h-3.897l-2.103-2h-4v18h16v-18zm-13 9.729l.855-.791c1 .484 1.635.852 2.76 1.654 2.113-2.399 3.511-3.616 6.106-5.231l.279.64c-2.141 1.869-3.709 3.949-5.967 7.999-1.393-1.64-2.322-2.686-4.033-4.271z")}]]) 28 | 29 | (defn spinner [] 30 | [:svg {:width "38" :height "38" :viewBox "0 0 38 38"} 31 | [:defs [:linearGradient#a {:x1 "8.042%" :y1 "0%" :x2 "65.682%" :y2 "23.865%"} 32 | [:stop {:stop-color "#1F2937" :stop-opacity "0" :offset "0%"}] 33 | [:stop {:stop-color "#1F2937" :stop-opacity ".631" :offset "63.146%"}] 34 | [:stop {:stop-color "#1F2937" :offset "100%"}]]] 35 | [:g {:fill "none" :fill-rule "evenodd"} 36 | [:g {:transform "translate(1 1)"} 37 | [:path#Oval-2 {:d "M36 18c0-9.94-8.06-18-18-18" :stroke "url(#a)" :stroke-width "2"} 38 | [:animateTransform {:attributeName "transform" :type "rotate" :from "0 18 18" :to "360 18 18" :dur "0.9s" :repeatCount "indefinite"}]] 39 | [:circle {:fill "#1F2937" :cx "36" :cy "18" :r "1"} 40 | [:animateTransform {:attributeName "transform" :type "rotate" :from "0 18 18" :to "360 18 18" :dur "0.9s" :repeatCount "indefinite"}]]]]]) 41 | 42 | (defn get-screen-size [] 43 | (condp #(< %2 %1) js/window.screen.width 44 | 640 "sm" 45 | 768 "md" 46 | 1024 "lg" 47 | 1280 "xl" 48 | "2xl")) 49 | 50 | (def screen-size (r/atom (get-screen-size))) 51 | 52 | (defn card [children] 53 | [:div.shadow-lg.border.md:rounded-xl.bg-white.w-full.mb-2.lg:mr-16.md:mb-2.lg:mb-16 {:class "md:w-1/2 lg:w-5/12"} 54 | children]) 55 | 56 | (defn chart-container-button [{:keys [type active-tab]} children] 57 | [:button.p-5.md:p-6.hover:bg-gray-100.focus:outline-none.focus:ring 58 | {:class "w-1/3" :on-click (fn [] (reset! active-tab type))} 59 | [:div.flex.items-center.justify-center 60 | {:class (if (= @active-tab type) "text-blue-600" "text-gray-600")} 61 | [:div.w-4.h-4.mr-1 [icon {:name type}]] 62 | children]]) 63 | 64 | (defn chart-container [{:keys [load]}] 65 | (let [copy-id (random-uuid) 66 | data (r/atom nil)] 67 | (-> (load) 68 | (.then (fn [res] (reset! data res))) 69 | (.catch (fn [e] (prn e)))) 70 | (clipboard. ".copy-button") 71 | (let [active-tab (r/atom :chart) 72 | active-variant (r/atom 0)] 73 | (fn [{:keys [title charts]}] 74 | (let [chart-height (if (#{"sm" "md" "lg"} @screen-size) "auto" 399) 75 | height (if (#{"sm" "md" "lg"} @screen-size) "auto" (- chart-height 42))] 76 | [card 77 | [:<> 78 | [:div.p-6.md:pt-14.md:px-14.border-b 79 | {:style {:height "calc(100% - 72px)"}} 80 | [:h2.text-3xl.font-semibold.tracking-wide.mb-3 81 | title] 82 | (when (> (count charts) 1) 83 | [:div.pb-3 84 | [:h3.mb-2.text-sm.font-bold "Variants"] 85 | [:ul.flex.flex-wrap 86 | (doall 87 | (map-indexed 88 | (fn [idx {:keys [title]}] 89 | [:li.mr-2.mb-2 {:key title :class (if (= idx @active-variant) "text-blue-300" "text-white")} 90 | [:button.px-3.py-1.rounded-full.bg-gray-700.focus:outline-none.focus:ring 91 | {:on-click #(reset! active-variant idx)} 92 | title]]) 93 | charts))]]) 94 | (let [{:keys [d3-apis chart code-formatted]} (nth charts @active-variant)] 95 | [:div 96 | [:div 97 | {:class 98 | (r/class-names (when-not (= @active-tab :chart) "hidden") 99 | (when-not @data "flex justify-center items-center")) 100 | :style {:height chart-height}} 101 | (if @data 102 | [chart @data] 103 | [spinner])] 104 | [:div 105 | {:class (r/class-names (when-not (= @active-tab :code) "hidden"))} 106 | [:pre.overflow-auto.mb-4 107 | {:style {:height height} :id (str "code" copy-id)} 108 | [:div {:dangerouslySetInnerHTML {:__html code-formatted}}]] 109 | [:div.flex.justify-center 110 | [:button.copy-button.font-bold.border.px-3.focus:outline-none.focus:ring 111 | {:data-clipboard-target (str "#code" copy-id)} 112 | [:div.flex.items-center.justify-center 113 | [:div.w-4.h-4.mr-1 [icon {:name :copy :class "text-gray-600"}]] 114 | "copy"]]]] 115 | [:div 116 | {:class (r/class-names (when-not (= @active-tab :data) "hidden"))} 117 | [:pre.overflow-auto.mb-4 118 | {:style {:height height} :id (str "data" copy-id)} 119 | (if (coll? @data) 120 | (with-out-str (pprint (vec @data))) 121 | (.stringify js/JSON @data nil 2))] 122 | [:div.flex.justify-center 123 | [:button.copy-button.font-bold.border.px-3.focus:outline-none.focus:ring 124 | {:data-clipboard-target (str "#data" copy-id)} 125 | [:div.flex.items-center.justify-center 126 | [:div.w-4.h-4.mr-1 127 | [icon {:name :copy :class "text-gray-600"}]] 128 | "copy"]]]] 129 | [:div.pt-3 130 | [:h3.mb-2.text-sm.font-bold.pl-3 "d3 APIs"] 131 | [:ul.flex.flex-wrap 132 | (map (fn [{:keys [fn doc-link]}] 133 | [:li.text-white.mr-2.mb-2.rounded-full 134 | {:key fn :class (if doc-link "bg-gray-700" "bg-red-400")} 135 | [:a.focus:outline-none.focus:ring.rounded-full.px-3.py-1.block 136 | {:href doc-link :target "_blank" :rel "noopener"} fn]]) 137 | d3-apis)]]])] 138 | [:div.flex.divide-x 139 | [chart-container-button {:type :chart :active-tab active-tab} "Chart"] 140 | [chart-container-button {:type :code :active-tab active-tab} "Code"] 141 | [chart-container-button {:type :data :active-tab active-tab} "Data"]]]]))))) 142 | 143 | (defn app [] 144 | (r/with-let [_ (js/window.addEventListener "resize" (fn [] (reset! screen-size (get-screen-size))))] 145 | [:div.text-gray-900.flex.flex-col.h-screen 146 | [:header.border-b.bg-gradient-to-b.from-gray-600.to-gray-900 147 | [:div.px-6.py-4.max-w-7xl.mx-auto 148 | [:h1.text-xl.font-bold.text-white 149 | [:a {:href "https://rollacaster.github.io/hiccup-d3/"} "hiccup-d3"]] 150 | [:div.text-white.py-12.flex 151 | [:div.text-4xl {:class "lg:w-1/2"} 152 | [:div.max-w-md 153 | "Hiccup D3-Charts in ClojureScript"]] 154 | [:div.text-lg.hidden.md:block {:class "w-1/2"} 155 | [:div.max-w-md 156 | "Use these starting points to create a new chart with " 157 | [:a.underline {:href "https://github.com/weavejester/hiccup"} "hiccup"] 158 | ". No functionality was wrapped, access the full " 159 | [:a.underline 160 | {:href "https://github.com/d3/d3/blob/master/API.md"} "D3 API"] ". The 161 | example code assumes D3 is already required."]]]]] 162 | [:div.flex-1 163 | [:div.max-w-7xl.mx-auto.py-2.md:p-6.flex.flex-wrap 164 | [chart-container bar] 165 | [chart-container pie] 166 | [chart-container pack] 167 | [chart-container tree] 168 | [chart-container world-map] 169 | [chart-container sankey] 170 | [chart-container sunburst] 171 | [chart-container graph] 172 | [chart-container line] 173 | [chart-container treemap] 174 | [chart-container chord] 175 | [chart-container contour] 176 | [chart-container voronoi] 177 | [chart-container streamgraph]]] 178 | [:footer.bg-gray-800.flex.justify-center.py-2 179 | [:a.text-white.underline {:href "https://github.com/rollacaster/hiccup-d3"} "Code"]]] 180 | (finally 181 | (js/document.removeEventListener "resize" get-screen-size)))) 182 | 183 | (dom/render [app] (js/document.getElementById "root")) 184 | 185 | (defn init []) 186 | 187 | -------------------------------------------------------------------------------- /public/data/flare-2.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "flare", 3 | "children": [ 4 | { 5 | "name": "analytics", 6 | "children": [ 7 | { 8 | "name": "cluster", 9 | "children": [ 10 | {"name": "AgglomerativeCluster", "value": 3938}, 11 | {"name": "CommunityStructure", "value": 3812}, 12 | {"name": "HierarchicalCluster", "value": 6714}, 13 | {"name": "MergeEdge", "value": 743} 14 | ] 15 | }, 16 | { 17 | "name": "graph", 18 | "children": [ 19 | {"name": "BetweennessCentrality", "value": 3534}, 20 | {"name": "LinkDistance", "value": 5731}, 21 | {"name": "MaxFlowMinCut", "value": 7840}, 22 | {"name": "ShortestPaths", "value": 5914}, 23 | {"name": "SpanningTree", "value": 3416} 24 | ] 25 | }, 26 | { 27 | "name": "optimization", 28 | "children": [ 29 | {"name": "AspectRatioBanker", "value": 7074} 30 | ] 31 | } 32 | ] 33 | }, 34 | { 35 | "name": "animate", 36 | "children": [ 37 | {"name": "Easing", "value": 17010}, 38 | {"name": "FunctionSequence", "value": 5842}, 39 | { 40 | "name": "interpolate", 41 | "children": [ 42 | {"name": "ArrayInterpolator", "value": 1983}, 43 | {"name": "ColorInterpolator", "value": 2047}, 44 | {"name": "DateInterpolator", "value": 1375}, 45 | {"name": "Interpolator", "value": 8746}, 46 | {"name": "MatrixInterpolator", "value": 2202}, 47 | {"name": "NumberInterpolator", "value": 1382}, 48 | {"name": "ObjectInterpolator", "value": 1629}, 49 | {"name": "PointInterpolator", "value": 1675}, 50 | {"name": "RectangleInterpolator", "value": 2042} 51 | ] 52 | }, 53 | {"name": "ISchedulable", "value": 1041}, 54 | {"name": "Parallel", "value": 5176}, 55 | {"name": "Pause", "value": 449}, 56 | {"name": "Scheduler", "value": 5593}, 57 | {"name": "Sequence", "value": 5534}, 58 | {"name": "Transition", "value": 9201}, 59 | {"name": "Transitioner", "value": 19975}, 60 | {"name": "TransitionEvent", "value": 1116}, 61 | {"name": "Tween", "value": 6006} 62 | ] 63 | }, 64 | { 65 | "name": "data", 66 | "children": [ 67 | { 68 | "name": "converters", 69 | "children": [ 70 | {"name": "Converters", "value": 721}, 71 | {"name": "DelimitedTextConverter", "value": 4294}, 72 | {"name": "GraphMLConverter", "value": 9800}, 73 | {"name": "IDataConverter", "value": 1314}, 74 | {"name": "JSONConverter", "value": 2220} 75 | ] 76 | }, 77 | {"name": "DataField", "value": 1759}, 78 | {"name": "DataSchema", "value": 2165}, 79 | {"name": "DataSet", "value": 586}, 80 | {"name": "DataSource", "value": 3331}, 81 | {"name": "DataTable", "value": 772}, 82 | {"name": "DataUtil", "value": 3322} 83 | ] 84 | }, 85 | { 86 | "name": "display", 87 | "children": [ 88 | {"name": "DirtySprite", "value": 8833}, 89 | {"name": "LineSprite", "value": 1732}, 90 | {"name": "RectSprite", "value": 3623}, 91 | {"name": "TextSprite", "value": 10066} 92 | ] 93 | }, 94 | { 95 | "name": "flex", 96 | "children": [ 97 | {"name": "FlareVis", "value": 4116} 98 | ] 99 | }, 100 | { 101 | "name": "physics", 102 | "children": [ 103 | {"name": "DragForce", "value": 1082}, 104 | {"name": "GravityForce", "value": 1336}, 105 | {"name": "IForce", "value": 319}, 106 | {"name": "NBodyForce", "value": 10498}, 107 | {"name": "Particle", "value": 2822}, 108 | {"name": "Simulation", "value": 9983}, 109 | {"name": "Spring", "value": 2213}, 110 | {"name": "SpringForce", "value": 1681} 111 | ] 112 | }, 113 | { 114 | "name": "query", 115 | "children": [ 116 | {"name": "AggregateExpression", "value": 1616}, 117 | {"name": "And", "value": 1027}, 118 | {"name": "Arithmetic", "value": 3891}, 119 | {"name": "Average", "value": 891}, 120 | {"name": "BinaryExpression", "value": 2893}, 121 | {"name": "Comparison", "value": 5103}, 122 | {"name": "CompositeExpression", "value": 3677}, 123 | {"name": "Count", "value": 781}, 124 | {"name": "DateUtil", "value": 4141}, 125 | {"name": "Distinct", "value": 933}, 126 | {"name": "Expression", "value": 5130}, 127 | {"name": "ExpressionIterator", "value": 3617}, 128 | {"name": "Fn", "value": 3240}, 129 | {"name": "If", "value": 2732}, 130 | {"name": "IsA", "value": 2039}, 131 | {"name": "Literal", "value": 1214}, 132 | {"name": "Match", "value": 3748}, 133 | {"name": "Maximum", "value": 843}, 134 | { 135 | "name": "methods", 136 | "children": [ 137 | {"name": "add", "value": 593}, 138 | {"name": "and", "value": 330}, 139 | {"name": "average", "value": 287}, 140 | {"name": "count", "value": 277}, 141 | {"name": "distinct", "value": 292}, 142 | {"name": "div", "value": 595}, 143 | {"name": "eq", "value": 594}, 144 | {"name": "fn", "value": 460}, 145 | {"name": "gt", "value": 603}, 146 | {"name": "gte", "value": 625}, 147 | {"name": "iff", "value": 748}, 148 | {"name": "isa", "value": 461}, 149 | {"name": "lt", "value": 597}, 150 | {"name": "lte", "value": 619}, 151 | {"name": "max", "value": 283}, 152 | {"name": "min", "value": 283}, 153 | {"name": "mod", "value": 591}, 154 | {"name": "mul", "value": 603}, 155 | {"name": "neq", "value": 599}, 156 | {"name": "not", "value": 386}, 157 | {"name": "or", "value": 323}, 158 | {"name": "orderby", "value": 307}, 159 | {"name": "range", "value": 772}, 160 | {"name": "select", "value": 296}, 161 | {"name": "stddev", "value": 363}, 162 | {"name": "sub", "value": 600}, 163 | {"name": "sum", "value": 280}, 164 | {"name": "update", "value": 307}, 165 | {"name": "variance", "value": 335}, 166 | {"name": "where", "value": 299}, 167 | {"name": "xor", "value": 354}, 168 | {"name": "_", "value": 264} 169 | ] 170 | }, 171 | {"name": "Minimum", "value": 843}, 172 | {"name": "Not", "value": 1554}, 173 | {"name": "Or", "value": 970}, 174 | {"name": "Query", "value": 13896}, 175 | {"name": "Range", "value": 1594}, 176 | {"name": "StringUtil", "value": 4130}, 177 | {"name": "Sum", "value": 791}, 178 | {"name": "Variable", "value": 1124}, 179 | {"name": "Variance", "value": 1876}, 180 | {"name": "Xor", "value": 1101} 181 | ] 182 | }, 183 | { 184 | "name": "scale", 185 | "children": [ 186 | {"name": "IScaleMap", "value": 2105}, 187 | {"name": "LinearScale", "value": 1316}, 188 | {"name": "LogScale", "value": 3151}, 189 | {"name": "OrdinalScale", "value": 3770}, 190 | {"name": "QuantileScale", "value": 2435}, 191 | {"name": "QuantitativeScale", "value": 4839}, 192 | {"name": "RootScale", "value": 1756}, 193 | {"name": "Scale", "value": 4268}, 194 | {"name": "ScaleType", "value": 1821}, 195 | {"name": "TimeScale", "value": 5833} 196 | ] 197 | }, 198 | { 199 | "name": "util", 200 | "children": [ 201 | {"name": "Arrays", "value": 8258}, 202 | {"name": "Colors", "value": 10001}, 203 | {"name": "Dates", "value": 8217}, 204 | {"name": "Displays", "value": 12555}, 205 | {"name": "Filter", "value": 2324}, 206 | {"name": "Geometry", "value": 10993}, 207 | { 208 | "name": "heap", 209 | "children": [ 210 | {"name": "FibonacciHeap", "value": 9354}, 211 | {"name": "HeapNode", "value": 1233} 212 | ] 213 | }, 214 | {"name": "IEvaluable", "value": 335}, 215 | {"name": "IPredicate", "value": 383}, 216 | {"name": "IValueProxy", "value": 874}, 217 | { 218 | "name": "math", 219 | "children": [ 220 | {"name": "DenseMatrix", "value": 3165}, 221 | {"name": "IMatrix", "value": 2815}, 222 | {"name": "SparseMatrix", "value": 3366} 223 | ] 224 | }, 225 | {"name": "Maths", "value": 17705}, 226 | {"name": "Orientation", "value": 1486}, 227 | { 228 | "name": "palette", 229 | "children": [ 230 | {"name": "ColorPalette", "value": 6367}, 231 | {"name": "Palette", "value": 1229}, 232 | {"name": "ShapePalette", "value": 2059}, 233 | {"name": "SizePalette", "value": 2291} 234 | ] 235 | }, 236 | {"name": "Property", "value": 5559}, 237 | {"name": "Shapes", "value": 19118}, 238 | {"name": "Sort", "value": 6887}, 239 | {"name": "Stats", "value": 6557}, 240 | {"name": "Strings", "value": 22026} 241 | ] 242 | }, 243 | { 244 | "name": "vis", 245 | "children": [ 246 | { 247 | "name": "axis", 248 | "children": [ 249 | {"name": "Axes", "value": 1302}, 250 | {"name": "Axis", "value": 24593}, 251 | {"name": "AxisGridLine", "value": 652}, 252 | {"name": "AxisLabel", "value": 636}, 253 | {"name": "CartesianAxes", "value": 6703} 254 | ] 255 | }, 256 | { 257 | "name": "controls", 258 | "children": [ 259 | {"name": "AnchorControl", "value": 2138}, 260 | {"name": "ClickControl", "value": 3824}, 261 | {"name": "Control", "value": 1353}, 262 | {"name": "ControlList", "value": 4665}, 263 | {"name": "DragControl", "value": 2649}, 264 | {"name": "ExpandControl", "value": 2832}, 265 | {"name": "HoverControl", "value": 4896}, 266 | {"name": "IControl", "value": 763}, 267 | {"name": "PanZoomControl", "value": 5222}, 268 | {"name": "SelectionControl", "value": 7862}, 269 | {"name": "TooltipControl", "value": 8435} 270 | ] 271 | }, 272 | { 273 | "name": "data2", 274 | "children": [ 275 | {"name": "Data", "value": 20544}, 276 | {"name": "DataList", "value": 19788}, 277 | {"name": "DataSprite", "value": 10349}, 278 | {"name": "EdgeSprite", "value": 3301}, 279 | {"name": "NodeSprite", "value": 19382}, 280 | { 281 | "name": "render", 282 | "children": [ 283 | {"name": "ArrowType", "value": 698}, 284 | {"name": "EdgeRenderer", "value": 5569}, 285 | {"name": "IRenderer", "value": 353}, 286 | {"name": "ShapeRenderer", "value": 2247} 287 | ] 288 | }, 289 | {"name": "ScaleBinding", "value": 11275}, 290 | {"name": "Tree", "value": 7147}, 291 | {"name": "TreeBuilder", "value": 9930} 292 | ] 293 | }, 294 | { 295 | "name": "events", 296 | "children": [ 297 | {"name": "DataEvent", "value": 2313}, 298 | {"name": "SelectionEvent", "value": 1880}, 299 | {"name": "TooltipEvent", "value": 1701}, 300 | {"name": "VisualizationEvent", "value": 1117} 301 | ] 302 | }, 303 | { 304 | "name": "legend", 305 | "children": [ 306 | {"name": "Legend", "value": 20859}, 307 | {"name": "LegendItem", "value": 4614}, 308 | {"name": "LegendRange", "value": 10530} 309 | ] 310 | }, 311 | { 312 | "name": "operator", 313 | "children": [ 314 | { 315 | "name": "distortion", 316 | "children": [ 317 | {"name": "BifocalDistortion", "value": 4461}, 318 | {"name": "Distortion", "value": 6314}, 319 | {"name": "FisheyeDistortion", "value": 3444} 320 | ] 321 | }, 322 | { 323 | "name": "encoder", 324 | "children": [ 325 | {"name": "ColorEncoder", "value": 3179}, 326 | {"name": "Encoder", "value": 4060}, 327 | {"name": "PropertyEncoder", "value": 4138}, 328 | {"name": "ShapeEncoder", "value": 1690}, 329 | {"name": "SizeEncoder", "value": 1830} 330 | ] 331 | }, 332 | { 333 | "name": "filter", 334 | "children": [ 335 | {"name": "FisheyeTreeFilter", "value": 5219}, 336 | {"name": "GraphDistanceFilter", "value": 3165}, 337 | {"name": "VisibilityFilter", "value": 3509} 338 | ] 339 | }, 340 | {"name": "IOperator", "value": 1286}, 341 | { 342 | "name": "label", 343 | "children": [ 344 | {"name": "Labeler", "value": 9956}, 345 | {"name": "RadialLabeler", "value": 3899}, 346 | {"name": "StackedAreaLabeler", "value": 3202} 347 | ] 348 | }, 349 | { 350 | "name": "layout", 351 | "children": [ 352 | {"name": "AxisLayout", "value": 6725}, 353 | {"name": "BundledEdgeRouter", "value": 3727}, 354 | {"name": "CircleLayout", "value": 9317}, 355 | {"name": "CirclePackingLayout", "value": 12003}, 356 | {"name": "DendrogramLayout", "value": 4853}, 357 | {"name": "ForceDirectedLayout", "value": 8411}, 358 | {"name": "IcicleTreeLayout", "value": 4864}, 359 | {"name": "IndentedTreeLayout", "value": 3174}, 360 | {"name": "Layout", "value": 7881}, 361 | {"name": "NodeLinkTreeLayout", "value": 12870}, 362 | {"name": "PieLayout", "value": 2728}, 363 | {"name": "RadialTreeLayout", "value": 12348}, 364 | {"name": "RandomLayout", "value": 870}, 365 | {"name": "StackedAreaLayout", "value": 9121}, 366 | {"name": "TreeMapLayout", "value": 9191} 367 | ] 368 | }, 369 | {"name": "Operator", "value": 2490}, 370 | {"name": "OperatorList", "value": 5248}, 371 | {"name": "OperatorSequence", "value": 4190}, 372 | {"name": "OperatorSwitch", "value": 2581}, 373 | {"name": "SortOperator", "value": 2023} 374 | ] 375 | }, 376 | {"name": "Visualization", "value": 16540} 377 | ] 378 | } 379 | ] 380 | } 381 | -------------------------------------------------------------------------------- /public/data/volcano.json: -------------------------------------------------------------------------------- 1 | {"width":87,"height":61,"values":[103,104,104,105,105,106,106,106,107,107,106,106,105,105,104,104,104,104,105,107,107,106,105,105,107,108,109,110,110,110,110,110,110,109,109,109,109,109,109,108,107,107,107,107,106,106,105,104,104,104,104,104,104,104,103,103,103,103,102,102,101,101,100,100,100,100,100,99,98,97,97,96,96,96,96,96,96,96,95,95,95,94,94,94,94,94,94,104,104,105,105,106,106,107,107,107,107,107,107,107,106,106,106,106,106,106,108,108,108,106,106,108,109,110,110,112,112,113,112,111,110,110,110,110,109,109,109,108,107,107,107,107,106,106,105,104,104,104,104,104,104,104,103,103,103,103,102,102,101,101,100,100,100,100,99,99,98,97,97,96,96,96,96,96,96,96,95,95,95,94,94,94,94,94,104,105,105,106,106,107,107,108,108,108,108,108,108,108,108,108,108,108,108,108,110,110,110,110,110,110,110,111,113,115,116,115,113,112,110,110,110,110,110,110,109,108,108,108,108,107,106,105,105,105,105,105,105,104,104,104,104,103,103,103,102,102,102,101,100,100,100,99,99,98,97,97,96,96,96,96,96,96,96,96,95,95,94,94,94,94,94,105,105,106,106,107,107,108,108,109,109,109,109,109,110,110,110,110,110,110,110,111,112,115,115,115,115,115,116,116,117,119,118,117,116,114,113,112,110,110,110,110,110,110,109,109,108,107,106,106,106,106,106,105,105,105,104,104,104,103,103,103,102,102,102,101,100,100,99,99,98,97,97,96,96,96,96,96,96,96,96,95,95,94,94,94,94,94,105,106,106,107,107,108,108,109,109,110,110,110,110,111,110,110,110,110,111,114,115,116,121,121,121,121,121,122,123,124,124,123,121,119,118,117,115,114,112,111,110,110,110,110,110,110,109,109,108,109,107,107,106,106,105,105,104,104,104,104,103,103,102,102,102,101,100,100,99,99,98,97,96,96,96,96,96,96,96,96,95,95,94,94,94,94,94,106,106,107,107,107,108,109,109,110,110,111,111,112,113,112,111,111,112,115,118,118,119,126,128,128,127,128,128,129,130,129,128,127,125,122,120,118,117,115,114,112,110,110,110,110,110,111,110,110,110,109,109,108,107,106,105,105,105,104,104,104,103,103,102,102,102,101,100,99,99,98,97,96,96,96,96,96,96,96,96,95,95,94,94,94,94,94,106,107,107,108,108,108,109,110,110,111,112,113,114,115,114,115,116,116,119,123,125,130,133,134,134,134,134,135,135,136,135,134,132,130,128,124,121,119,118,116,114,112,111,111,111,112,112,111,110,110,110,109,108,108,107,108,107,106,105,104,104,104,103,103,103,102,101,100,99,99,98,97,96,96,96,96,96,96,96,96,95,95,95,94,94,94,94,107,107,108,108,109,109,110,110,112,113,114,115,116,117,117,120,120,121,123,129,134,136,138,139,139,139,140,142,142,141,141,140,137,134,131,127,124,122,120,118,117,115,113,114,113,114,114,113,112,111,110,110,109,108,107,106,105,105,105,104,104,104,103,103,103,101,100,100,99,99,98,97,96,96,96,96,96,96,96,96,96,95,95,94,94,94,94,107,108,108,109,109,110,111,112,114,115,116,117,118,119,121,125,125,127,131,136,140,141,142,144,144,145,148,149,148,147,146,144,140,138,136,130,127,125,123,121,119,118,117,117,116,116,116,115,114,113,113,111,110,109,108,107,106,105,105,103,103,102,102,102,103,101,100,100,100,99,98,98,97,96,96,96,96,96,96,96,96,95,95,95,94,94,94,107,108,109,109,110,110,110,113,115,117,118,119,120,123,126,129,131,134,139,142,144,145,147,148,150,152,154,154,153,154,151,149,146,143,140,136,130,128,126,124,122,121,120,119,118,117,117,117,116,116,115,113,112,110,109,108,107,106,106,105,104,103,102,101,101,100,100,100,100,99,99,98,97,96,96,96,96,96,96,96,96,95,95,95,94,94,94,107,108,109,109,110,110,110,112,115,117,119,122,125,127,130,133,137,141,143,145,148,149,152,155,157,159,160,160,161,162,159,156,153,149,146,142,139,134,130,128,126,125,122,120,120,120,119,119,119,118,117,115,113,111,110,110,109,108,107,106,106,105,104,104,103,102,100,100,100,99,99,98,97,96,96,96,96,96,96,96,96,95,95,95,95,94,94,108,108,109,109,110,110,110,112,115,118,121,125,128,131,134,138,141,145,147,149,152,157,160,161,163,166,169,170,170,171,168,162,158,155,152,148,144,140,136,132,129,127,124,122,121,120,120,120,120,120,119,117,115,113,110,110,110,110,109,108,108,107,107,106,105,104,102,100,100,100,99,98,97,96,96,96,96,96,96,96,96,96,95,95,95,94,94,108,109,109,110,110,111,112,114,117,120,124,128,131,135,138,142,145,149,152,155,158,163,166,167,170,173,175,175,175,173,171,169,164,160,156,153,149,144,140,136,131,129,126,124,123,123,122,121,120,120,120,119,117,115,111,110,110,110,110,110,109,109,110,109,108,106,103,101,100,100,100,98,97,96,96,96,96,96,96,96,96,96,95,95,95,95,94,108,109,110,110,110,113,114,116,119,122,126,131,134,138,141,145,149,152,156,160,164,169,171,174,177,175,178,179,177,175,174,172,168,163,160,157,151,147,143,138,133,130,128,125,125,124,123,122,121,121,120,120,118,116,115,111,110,110,110,110,113,114,113,112,110,107,105,102,100,100,100,98,97,96,96,96,96,96,96,96,96,96,96,95,95,95,94,108,109,110,110,112,115,116,118,122,125,129,133,137,140,144,149,152,157,161,165,169,173,176,179,179,180,180,180,178,178,176,175,171,165,163,160,153,148,143,139,135,132,129,128,127,125,124,124,123,123,122,122,120,118,117,118,115,117,118,118,119,117,116,115,112,109,107,105,100,100,100,100,97,96,96,96,96,96,96,96,96,96,96,95,95,95,95,108,109,110,111,114,116,118,122,127,130,133,136,140,144,148,153,157,161,165,169,173,177,180,180,180,180,181,180,180,180,179,178,173,168,165,161,156,149,143,139,136,133,130,129,128,126,126,125,125,125,125,124,122,121,120,120,120,120,121,122,123,122,120,117,114,111,108,106,105,100,100,100,100,96,96,96,96,96,96,96,96,96,96,96,95,95,95,107,108,110,113,115,118,121,126,131,134,137,140,143,148,152,157,162,165,169,173,177,181,181,181,180,181,181,181,180,180,180,178,176,170,167,163,158,152,145,140,137,134,132,130,129,127,127,126,127,128,128,126,125,125,125,123,126,128,129,130,130,125,124,119,116,114,112,110,107,106,105,100,100,100,96,96,96,96,96,96,96,96,96,96,96,95,95,107,109,111,116,119,122,125,130,135,137,140,144,148,152,156,161,165,168,172,177,181,184,181,181,181,180,180,180,180,180,180,178,178,173,168,163,158,152,146,141,138,136,134,132,130,129,128,128,130,130,130,129,128,129,129,130,132,133,133,134,134,132,128,122,119,116,114,112,108,106,105,105,100,100,100,97,97,97,97,97,97,97,96,96,96,96,95,108,110,112,117,122,126,129,135,139,141,144,149,153,156,160,165,168,171,177,181,184,185,182,180,180,179,178,178,180,179,179,178,176,173,168,163,157,152,148,143,139,137,135,133,131,130,130,131,132,132,132,131,132,132,133,134,136,137,137,137,136,134,131,124,121,118,116,114,111,109,107,106,105,100,100,100,97,97,97,97,97,97,97,96,96,96,96,108,110,114,120,126,129,134,139,142,144,146,152,158,161,164,168,171,175,181,184,186,186,183,179,178,178,177,175,178,177,177,176,175,173,168,162,156,153,149,145,142,140,138,136,133,132,132,132,134,134,134,134,135,136,137,138,140,140,140,140,139,137,133,127,123,120,118,115,112,108,108,106,106,105,100,100,100,98,98,98,98,98,98,97,96,96,96,108,110,116,122,128,133,137,141,143,146,149,154,161,165,168,172,175,180,184,188,189,187,182,178,176,176,175,173,174,173,175,174,173,171,168,161,157,154,150,148,145,143,141,138,135,135,134,135,135,136,136,137,138,139,140,140,140,140,140,140,140,139,135,130,126,123,120,117,114,111,109,108,107,106,105,100,100,100,99,99,98,98,98,98,97,97,96,110,112,118,124,130,135,139,142,145,148,151,157,163,169,172,176,179,183,187,190,190,186,180,177,175,173,170,169,169,170,171,172,170,170,167,163,160,157,154,152,149,147,144,140,137,137,136,137,138,138,139,140,141,140,140,140,140,140,140,140,140,138,134,131,128,124,121,118,115,112,110,109,108,107,106,105,100,100,100,99,99,99,98,98,98,97,97,110,114,120,126,131,136,140,143,146,149,154,159,166,171,177,180,182,186,190,190,190,185,179,174,171,168,166,163,164,163,166,169,170,170,168,164,162,161,158,155,153,150,147,143,139,139,139,139,140,141,141,142,142,141,140,140,140,140,140,140,140,137,134,131,128,125,122,119,116,114,112,110,109,109,108,107,105,100,100,100,99,99,99,98,98,97,97,110,115,121,127,132,136,140,144,148,151,157,162,169,174,178,181,186,188,190,191,190,184,177,172,168,165,162,159,158,158,159,161,166,167,169,166,164,163,161,159,156,153,149,146,142,142,141,142,143,143,143,143,144,142,141,140,140,140,140,140,140,138,134,131,128,125,123,120,117,116,114,112,110,109,108,107,106,105,102,101,100,99,99,99,98,98,97,110,116,121,127,132,136,140,144,148,154,160,166,171,176,180,184,189,190,191,191,191,183,176,170,166,163,159,156,154,155,155,158,161,165,170,167,166,165,163,161,158,155,152,150,146,145,145,145,146,146,144,145,145,144,142,141,140,140,140,140,138,136,134,131,128,125,123,121,119,117,115,113,112,111,111,110,108,106,105,102,100,100,99,99,99,98,98,110,114,119,126,131,135,140,144,149,158,164,168,172,176,183,184,189,190,191,191,190,183,174,169,165,161,158,154,150,151,152,155,159,164,168,168,168,167,165,163,160,158,155,153,150,148,148,148,148,148,147,146,146,145,143,142,141,140,139,138,136,134,132,131,128,126,124,122,120,118,116,114,113,113,112,111,108,107,106,105,104,102,100,99,99,99,99,110,113,119,125,131,136,141,145,150,158,164,168,172,177,183,187,189,191,192,191,190,183,174,168,164,160,157,153,150,149,150,154,158,162,166,170,170,168,166,164,162,160,158,155,152,151,151,151,151,151,149,148,147,146,145,143,142,140,139,137,135,134,132,131,129,127,125,123,121,119,117,116,114,114,113,112,110,108,107,105,103,100,100,100,100,99,99,110,112,118,124,130,136,142,146,151,157,163,168,174,178,183,187,189,190,191,192,189,182,174,168,164,160,157,153,149,148,149,153,157,161,167,170,170,170,168,166,165,163,159,156,154,153,155,155,155,155,152,150,149,147,145,143,141,140,139,138,136,134,133,131,130,128,126,124,122,120,119,117,116,115,114,113,111,110,107,106,105,105,102,101,100,100,100,110,111,116,122,129,137,142,146,151,158,164,168,172,179,183,186,189,190,192,193,188,182,174,168,164,161,157,154,151,149,151,154,158,161,167,170,170,170,170,169,168,166,160,157,156,156,157,158,159,159,156,153,150,148,146,144,141,140,140,138,136,135,134,133,131,129,127,125,123,122,120,118,117,116,115,114,112,111,110,108,107,106,105,104,102,100,100,108,110,115,121,131,137,142,147,152,159,163,167,170,177,182,184,187,189,192,194,189,183,174,169,165,161,158,156,154,153,154,157,160,164,167,171,172,174,174,173,171,168,161,159,158,158,159,161,161,160,158,155,151,149,147,144,142,141,140,138,137,136,135,134,132,130,128,126,125,123,121,119,118,117,116,115,113,112,112,111,110,109,108,107,105,101,100,108,110,114,120,128,134,140,146,152,158,162,166,169,175,180,183,186,189,193,195,190,184,176,171,167,163,160,158,157,156,157,159,163,166,170,174,176,178,178,176,172,167,164,161,161,160,161,163,163,163,160,157,153,150,148,146,144,142,141,140,139,138,136,135,134,133,129,127,126,124,122,121,119,118,117,116,114,113,112,111,110,110,109,109,107,104,100,107,110,115,119,123,129,135,141,146,156,161,165,168,173,179,182,186,189,193,194,191,184,179,175,170,166,162,161,160,160,161,162,165,169,172,176,178,179,179,176,172,168,165,163,163,163,163,165,166,164,161,158,155,152,150,147,146,144,143,142,141,139,139,138,137,135,131,128,127,125,124,122,121,119,118,116,115,113,112,111,111,110,110,109,109,105,100,107,110,114,117,121,126,130,135,142,151,159,163,167,171,177,182,185,189,192,193,191,187,183,179,174,169,167,166,164,164,165,166,169,171,174,178,179,180,180,178,173,169,166,165,165,166,165,168,169,166,163,159,157,154,152,149,148,147,146,145,143,142,141,140,139,138,133,130,128,127,125,124,122,120,118,117,115,112,111,111,111,111,110,109,108,106,100,107,109,113,118,122,126,129,134,139,150,156,160,165,170,175,181,184,188,191,192,192,189,185,181,177,173,171,169,168,167,169,170,172,174,176,178,179,180,180,179,175,170,168,166,166,168,168,170,170,168,164,160,158,155,152,151,150,149,149,148,147,145,144,143,142,141,136,133,130,129,127,125,123,120,119,118,115,112,111,111,111,110,109,109,109,105,100,105,107,111,117,121,124,127,131,137,148,154,159,164,168,174,181,184,187,190,191,191,190,187,184,180,178,175,174,172,171,173,173,173,176,178,179,180,180,180,179,175,170,168,166,168,169,170,170,170,170,166,161,158,156,154,153,151,150,150,150,150,148,147,146,145,143,139,135,133,131,129,126,124,121,120,118,114,111,111,111,110,110,109,107,106,104,100,104,106,110,114,118,121,125,129,135,142,150,157,162,167,173,180,183,186,188,190,190,190,189,184,183,181,180,179,179,176,177,176,176,177,178,179,180,180,179,177,173,169,167,166,167,169,170,170,170,170,167,161,159,157,155,153,151,150,150,150,150,150,150,149,147,145,141,138,135,133,130,127,125,123,121,118,113,111,110,110,109,109,107,106,105,103,100,104,106,108,111,115,119,123,128,134,141,148,154,161,166,172,179,182,184,186,189,190,190,190,187,185,183,180,180,180,179,179,177,176,177,178,178,178,177,176,174,171,168,166,164,166,168,170,170,170,170,168,162,159,157,155,153,151,150,150,150,150,150,150,150,150,148,144,140,137,134,132,129,127,125,122,117,111,110,107,107,106,105,104,103,102,101,100,103,105,107,110,114,118,122,127,132,140,146,153,159,165,171,176,180,183,185,186,189,190,188,187,184,182,180,180,180,179,178,176,176,176,176,174,174,173,172,170,168,167,165,163,164,165,169,170,170,170,166,162,159,157,155,153,151,150,150,150,150,150,150,150,150,150,146,142,139,136,133,131,128,125,122,117,110,108,106,105,104,103,103,101,101,101,101,102,103,106,108,112,116,121,125,130,138,145,151,157,163,170,174,178,181,181,184,186,186,187,186,184,181,180,180,180,179,178,174,173,173,171,170,170,169,168,167,166,164,163,162,161,164,167,169,170,168,164,160,158,157,155,153,151,150,150,150,150,150,150,150,150,150,147,144,141,138,135,133,128,125,122,116,109,107,104,104,103,102,101,101,101,101,101,101,102,105,107,110,115,120,124,129,136,143,149,155,162,168,170,174,176,178,179,181,182,184,184,183,181,180,180,179,177,174,172,170,168,166,165,164,164,164,164,162,160,159,159,158,160,162,164,166,166,163,159,157,156,155,153,151,150,150,150,150,150,150,150,150,150,149,146,143,140,137,133,129,124,119,112,108,105,103,103,102,101,101,101,101,100,100,101,102,104,106,109,113,118,122,127,133,141,149,155,161,165,168,170,172,175,176,177,179,181,181,181,180,180,179,177,174,171,167,165,163,161,160,160,160,160,160,157,155,155,154,154,155,157,159,161,161,161,159,156,154,154,153,151,150,150,150,150,150,150,150,150,150,149,147,144,141,137,133,129,123,116,110,107,104,102,102,101,101,101,100,100,100,100,102,103,104,106,108,112,116,120,125,129,137,146,154,161,163,165,166,169,172,173,174,175,177,178,178,178,178,177,174,171,168,164,160,158,157,157,156,156,156,155,152,151,150,150,151,151,152,154,156,157,157,156,155,153,152,152,151,150,150,150,150,150,150,150,150,150,150,147,144,141,138,133,127,120,113,109,106,103,101,101,101,100,100,100,100,100,100,103,104,105,106,108,110,114,118,123,127,133,143,150,156,160,160,161,162,167,170,171,172,173,175,175,174,174,173,171,168,164,160,156,155,154,153,153,152,152,150,149,148,148,148,148,148,149,149,150,152,152,152,152,151,150,150,150,150,150,150,150,150,150,150,150,150,149,147,144,141,138,132,125,118,111,108,105,103,102,101,101,101,100,100,100,100,100,104,105,106,107,108,110,113,117,120,125,129,138,145,151,156,156,157,158,160,164,166,168,170,171,172,171,171,169,166,163,160,156,153,151,150,150,149,149,149,148,146,146,146,146,146,146,146,147,148,148,149,149,149,148,148,148,148,149,149,150,150,150,150,150,150,150,148,146,143,141,136,129,123,117,110,108,105,104,103,102,102,101,101,100,100,100,100,103,104,105,106,107,109,111,115,118,122,127,133,140,143,150,152,153,155,157,159,162,164,167,168,168,168,167,166,163,160,157,153,150,148,148,147,147,147,145,145,144,143,143,143,144,144,144,144,145,145,145,145,146,146,146,146,146,147,147,148,149,150,150,150,150,149,147,145,143,141,134,127,123,117,111,108,105,105,104,104,103,103,102,101,100,100,100,102,103,104,105,106,107,109,113,116,120,125,129,133,137,143,147,149,151,152,154,158,161,164,165,164,164,163,163,160,157,154,151,149,147,145,145,144,143,141,140,141,141,141,141,141,142,142,142,142,142,142,142,143,143,143,144,144,145,146,146,146,147,148,148,148,148,145,143,142,140,134,128,123,117,112,108,106,105,105,104,104,103,102,101,100,100,99,102,103,104,105,105,106,108,110,113,118,123,127,129,132,137,141,142,142,145,150,154,157,161,161,160,160,160,159,157,154,151,148,146,145,143,142,142,139,137,136,137,137,138,138,139,139,139,139,139,139,139,139,140,140,141,142,142,143,144,144,144,145,145,145,145,145,144,142,140,139,136,129,124,119,113,109,106,106,105,104,103,102,101,101,100,99,99,102,103,104,104,105,106,107,108,111,116,121,124,126,128,131,134,135,137,139,143,147,152,156,157,157,157,156,155,153,151,148,146,143,142,141,140,138,135,133,132,132,133,133,133,134,135,135,135,135,136,136,137,137,138,138,139,140,141,141,142,142,143,142,142,141,141,140,139,137,134,133,129,125,121,114,110,107,106,106,104,103,102,101,100,99,99,99,102,103,104,104,105,105,106,108,110,113,118,121,124,126,128,130,132,134,136,139,143,147,150,154,154,154,153,151,149,148,146,143,141,139,137,136,132,130,128,128,128,129,129,130,130,131,132,132,132,133,134,134,135,135,136,137,138,139,139,140,140,140,139,139,138,137,137,135,132,130,129,127,124,120,116,112,109,106,105,103,102,101,101,100,99,99,99,101,102,103,104,104,105,106,107,108,110,114,119,121,124,126,128,129,132,134,137,140,143,147,149,151,151,151,149,147,145,143,141,138,136,134,131,128,126,124,125,125,126,126,127,128,128,129,129,130,130,131,131,132,132,133,134,135,135,136,136,137,137,136,136,135,134,133,131,129,128,127,126,123,119,115,111,109,107,105,104,103,102,101,100,100,100,99,101,102,103,103,104,104,105,106,108,110,112,116,119,121,124,125,127,130,132,135,137,140,143,147,149,149,149,147,145,143,141,139,136,133,131,128,125,122,121,122,122,122,123,125,125,126,127,127,127,128,128,128,129,129,130,131,131,132,132,133,133,133,132,132,131,131,130,129,128,126,125,124,121,117,111,109,108,106,105,104,103,102,101,101,100,100,100,100,101,102,103,103,104,105,106,107,108,110,114,117,119,121,123,126,128,130,133,136,139,141,144,146,147,146,145,143,141,138,136,133,130,127,124,121,120,120,120,120,120,121,122,123,124,124,125,125,126,126,125,126,126,126,125,126,127,128,128,129,129,128,128,128,128,128,128,126,125,123,122,119,114,109,108,107,106,105,104,103,103,102,102,101,100,100,100,101,102,103,104,105,106,107,108,109,110,112,115,117,120,122,125,127,130,132,135,137,139,142,144,144,144,142,140,138,136,132,129,126,123,120,120,119,119,118,119,119,120,120,120,121,122,122,123,123,123,123,122,123,122,122,121,122,122,122,123,123,123,124,125,125,126,126,125,124,122,120,116,113,109,107,106,105,104,104,103,102,102,101,101,100,100,100,101,102,103,104,105,106,107,108,109,110,112,114,117,119,122,124,127,129,131,134,136,138,140,142,142,142,140,138,136,133,129,125,122,120,119,118,118,117,116,117,117,118,119,119,120,120,120,121,121,121,122,121,120,120,120,119,119,120,120,120,120,120,120,123,123,124,124,124,123,121,119,114,112,108,106,106,104,104,103,102,102,101,101,100,100,99,101,102,103,104,105,106,107,108,109,110,111,113,114,116,119,121,124,126,128,130,133,135,137,138,140,140,139,137,135,133,131,127,122,120,118,118,117,117,116,115,116,116,117,118,118,118,119,119,120,120,121,121,120,119,119,118,117,117,118,119,118,118,118,119,120,122,123,123,123,122,120,117,113,110,108,106,105,104,103,103,102,101,101,100,100,99,99,101,102,103,104,105,106,107,108,109,110,111,111,113,115,118,121,123,125,127,129,131,133,135,137,138,138,137,134,132,130,127,122,120,118,116,116,116,116,115,113,114,115,116,117,117,118,118,119,119,119,120,120,119,118,117,117,116,116,117,117,117,118,119,119,119,120,121,121,121,121,119,116,113,110,107,105,105,103,103,103,102,101,100,100,99,99,99,101,102,103,104,105,106,107,108,109,110,111,112,114,116,117,120,122,124,126,129,130,132,133,135,136,136,134,132,129,126,122,120,118,116,114,114,114,114,114,113,113,114,115,116,116,117,117,117,118,118,119,119,118,117,116,116,115,115,116,116,116,117,117,118,118,119,120,120,120,120,119,116,113,109,106,104,104,103,102,102,101,101,100,99,99,99,98,101,102,103,104,105,106,107,108,109,110,111,113,115,117,117,118,121,123,126,128,130,130,131,132,133,134,131,129,125,122,120,118,116,114,113,112,112,113,112,112,111,112,113,113,114,115,116,116,117,117,118,118,116,116,115,115,115,114,114,115,116,116,117,117,118,118,119,119,120,120,117,115,112,108,106,104,103,102,102,102,101,100,99,99,99,98,98,101,102,103,104,105,105,106,107,108,109,110,111,113,115,117,118,120,122,125,126,127,128,129,130,131,131,128,125,121,120,118,116,114,113,113,111,111,111,111,110,109,110,111,112,113,113,114,115,115,116,117,117,116,115,114,114,113,113,114,114,115,115,116,116,117,118,118,119,119,118,116,114,112,108,105,103,103,102,101,101,100,100,99,99,98,98,97,100,101,102,103,104,105,106,107,108,109,110,110,111,113,115,118,120,121,122,124,125,125,126,127,128,127,124,121,120,118,116,114,113,112,112,110,109,109,108,108,108,109,110,111,112,112,113,114,114,115,116,116,115,114,113,112,112,113,113,114,114,115,115,116,116,117,117,118,118,117,115,113,111,107,105,103,102,101,101,100,100,100,99,99,98,98,97,100,101,102,103,104,105,105,106,107,108,109,110,110,111,114,116,118,120,120,121,122,122,123,124,123,123,120,118,117,115,114,115,113,111,110,109,108,108,107,107,107,108,109,110,111,111,112,113,113,114,115,115,114,113,112,111,111,112,112,112,113,114,114,115,115,116,116,117,117,116,114,112,109,106,104,102,101,100,100,99,99,99,99,98,98,97,97]} 2 | -------------------------------------------------------------------------------- /public/data/miserables.json: -------------------------------------------------------------------------------- 1 | { 2 | "nodes": [ 3 | { "id": "Myriel", "group": 1 }, 4 | { "id": "Napoleon", "group": 1 }, 5 | { "id": "Mlle.Baptistine", "group": 1 }, 6 | { "id": "Mme.Magloire", "group": 1 }, 7 | { "id": "CountessdeLo", "group": 1 }, 8 | { "id": "Geborand", "group": 1 }, 9 | { "id": "Champtercier", "group": 1 }, 10 | { "id": "Cravatte", "group": 1 }, 11 | { "id": "Count", "group": 1 }, 12 | { "id": "OldMan", "group": 1 }, 13 | { "id": "Labarre", "group": 2 }, 14 | { "id": "Valjean", "group": 2 }, 15 | { "id": "Marguerite", "group": 3 }, 16 | { "id": "Mme.deR", "group": 2 }, 17 | { "id": "Isabeau", "group": 2 }, 18 | { "id": "Gervais", "group": 2 }, 19 | { "id": "Tholomyes", "group": 3 }, 20 | { "id": "Listolier", "group": 3 }, 21 | { "id": "Fameuil", "group": 3 }, 22 | { "id": "Blacheville", "group": 3 }, 23 | { "id": "Favourite", "group": 3 }, 24 | { "id": "Dahlia", "group": 3 }, 25 | { "id": "Zephine", "group": 3 }, 26 | { "id": "Fantine", "group": 3 }, 27 | { "id": "Mme.Thenardier", "group": 4 }, 28 | { "id": "Thenardier", "group": 4 }, 29 | { "id": "Cosette", "group": 5 }, 30 | { "id": "Javert", "group": 4 }, 31 | { "id": "Fauchelevent", "group": 0 }, 32 | { "id": "Bamatabois", "group": 2 }, 33 | { "id": "Perpetue", "group": 3 }, 34 | { "id": "Simplice", "group": 2 }, 35 | { "id": "Scaufflaire", "group": 2 }, 36 | { "id": "Woman1", "group": 2 }, 37 | { "id": "Judge", "group": 2 }, 38 | { "id": "Champmathieu", "group": 2 }, 39 | { "id": "Brevet", "group": 2 }, 40 | { "id": "Chenildieu", "group": 2 }, 41 | { "id": "Cochepaille", "group": 2 }, 42 | { "id": "Pontmercy", "group": 4 }, 43 | { "id": "Boulatruelle", "group": 6 }, 44 | { "id": "Eponine", "group": 4 }, 45 | { "id": "Anzelma", "group": 4 }, 46 | { "id": "Woman2", "group": 5 }, 47 | { "id": "MotherInnocent", "group": 0 }, 48 | { "id": "Gribier", "group": 0 }, 49 | { "id": "Jondrette", "group": 7 }, 50 | { "id": "Mme.Burgon", "group": 7 }, 51 | { "id": "Gavroche", "group": 8 }, 52 | { "id": "Gillenormand", "group": 5 }, 53 | { "id": "Magnon", "group": 5 }, 54 | { "id": "Mlle.Gillenormand", "group": 5 }, 55 | { "id": "Mme.Pontmercy", "group": 5 }, 56 | { "id": "Mlle.Vaubois", "group": 5 }, 57 | { "id": "Lt.Gillenormand", "group": 5 }, 58 | { "id": "Marius", "group": 8 }, 59 | { "id": "BaronessT", "group": 5 }, 60 | { "id": "Mabeuf", "group": 8 }, 61 | { "id": "Enjolras", "group": 8 }, 62 | { "id": "Combeferre", "group": 8 }, 63 | { "id": "Prouvaire", "group": 8 }, 64 | { "id": "Feuilly", "group": 8 }, 65 | { "id": "Courfeyrac", "group": 8 }, 66 | { "id": "Bahorel", "group": 8 }, 67 | { "id": "Bossuet", "group": 8 }, 68 | { "id": "Joly", "group": 8 }, 69 | { "id": "Grantaire", "group": 8 }, 70 | { "id": "MotherPlutarch", "group": 9 }, 71 | { "id": "Gueulemer", "group": 4 }, 72 | { "id": "Babet", "group": 4 }, 73 | { "id": "Claquesous", "group": 4 }, 74 | { "id": "Montparnasse", "group": 4 }, 75 | { "id": "Toussaint", "group": 5 }, 76 | { "id": "Child1", "group": 10 }, 77 | { "id": "Child2", "group": 10 }, 78 | { "id": "Brujon", "group": 4 }, 79 | { "id": "Mme.Hucheloup", "group": 8 } 80 | ], 81 | "links": [ 82 | { "source": "Napoleon", "target": "Myriel", "value": 1 }, 83 | { "source": "Mlle.Baptistine", "target": "Myriel", "value": 8 }, 84 | { "source": "Mme.Magloire", "target": "Myriel", "value": 10 }, 85 | { "source": "Mme.Magloire", "target": "Mlle.Baptistine", "value": 6 }, 86 | { "source": "CountessdeLo", "target": "Myriel", "value": 1 }, 87 | { "source": "Geborand", "target": "Myriel", "value": 1 }, 88 | { "source": "Champtercier", "target": "Myriel", "value": 1 }, 89 | { "source": "Cravatte", "target": "Myriel", "value": 1 }, 90 | { "source": "Count", "target": "Myriel", "value": 2 }, 91 | { "source": "OldMan", "target": "Myriel", "value": 1 }, 92 | { "source": "Valjean", "target": "Labarre", "value": 1 }, 93 | { "source": "Valjean", "target": "Mme.Magloire", "value": 3 }, 94 | { "source": "Valjean", "target": "Mlle.Baptistine", "value": 3 }, 95 | { "source": "Valjean", "target": "Myriel", "value": 5 }, 96 | { "source": "Marguerite", "target": "Valjean", "value": 1 }, 97 | { "source": "Mme.deR", "target": "Valjean", "value": 1 }, 98 | { "source": "Isabeau", "target": "Valjean", "value": 1 }, 99 | { "source": "Gervais", "target": "Valjean", "value": 1 }, 100 | { "source": "Listolier", "target": "Tholomyes", "value": 4 }, 101 | { "source": "Fameuil", "target": "Tholomyes", "value": 4 }, 102 | { "source": "Fameuil", "target": "Listolier", "value": 4 }, 103 | { "source": "Blacheville", "target": "Tholomyes", "value": 4 }, 104 | { "source": "Blacheville", "target": "Listolier", "value": 4 }, 105 | { "source": "Blacheville", "target": "Fameuil", "value": 4 }, 106 | { "source": "Favourite", "target": "Tholomyes", "value": 3 }, 107 | { "source": "Favourite", "target": "Listolier", "value": 3 }, 108 | { "source": "Favourite", "target": "Fameuil", "value": 3 }, 109 | { "source": "Favourite", "target": "Blacheville", "value": 4 }, 110 | { "source": "Dahlia", "target": "Tholomyes", "value": 3 }, 111 | { "source": "Dahlia", "target": "Listolier", "value": 3 }, 112 | { "source": "Dahlia", "target": "Fameuil", "value": 3 }, 113 | { "source": "Dahlia", "target": "Blacheville", "value": 3 }, 114 | { "source": "Dahlia", "target": "Favourite", "value": 5 }, 115 | { "source": "Zephine", "target": "Tholomyes", "value": 3 }, 116 | { "source": "Zephine", "target": "Listolier", "value": 3 }, 117 | { "source": "Zephine", "target": "Fameuil", "value": 3 }, 118 | { "source": "Zephine", "target": "Blacheville", "value": 3 }, 119 | { "source": "Zephine", "target": "Favourite", "value": 4 }, 120 | { "source": "Zephine", "target": "Dahlia", "value": 4 }, 121 | { "source": "Fantine", "target": "Tholomyes", "value": 3 }, 122 | { "source": "Fantine", "target": "Listolier", "value": 3 }, 123 | { "source": "Fantine", "target": "Fameuil", "value": 3 }, 124 | { "source": "Fantine", "target": "Blacheville", "value": 3 }, 125 | { "source": "Fantine", "target": "Favourite", "value": 4 }, 126 | { "source": "Fantine", "target": "Dahlia", "value": 4 }, 127 | { "source": "Fantine", "target": "Zephine", "value": 4 }, 128 | { "source": "Fantine", "target": "Marguerite", "value": 2 }, 129 | { "source": "Fantine", "target": "Valjean", "value": 9 }, 130 | { "source": "Mme.Thenardier", "target": "Fantine", "value": 2 }, 131 | { "source": "Mme.Thenardier", "target": "Valjean", "value": 7 }, 132 | { "source": "Thenardier", "target": "Mme.Thenardier", "value": 13 }, 133 | { "source": "Thenardier", "target": "Fantine", "value": 1 }, 134 | { "source": "Thenardier", "target": "Valjean", "value": 12 }, 135 | { "source": "Cosette", "target": "Mme.Thenardier", "value": 4 }, 136 | { "source": "Cosette", "target": "Valjean", "value": 31 }, 137 | { "source": "Cosette", "target": "Tholomyes", "value": 1 }, 138 | { "source": "Cosette", "target": "Thenardier", "value": 1 }, 139 | { "source": "Javert", "target": "Valjean", "value": 17 }, 140 | { "source": "Javert", "target": "Fantine", "value": 5 }, 141 | { "source": "Javert", "target": "Thenardier", "value": 5 }, 142 | { "source": "Javert", "target": "Mme.Thenardier", "value": 1 }, 143 | { "source": "Javert", "target": "Cosette", "value": 1 }, 144 | { "source": "Fauchelevent", "target": "Valjean", "value": 8 }, 145 | { "source": "Fauchelevent", "target": "Javert", "value": 1 }, 146 | { "source": "Bamatabois", "target": "Fantine", "value": 1 }, 147 | { "source": "Bamatabois", "target": "Javert", "value": 1 }, 148 | { "source": "Bamatabois", "target": "Valjean", "value": 2 }, 149 | { "source": "Perpetue", "target": "Fantine", "value": 1 }, 150 | { "source": "Simplice", "target": "Perpetue", "value": 2 }, 151 | { "source": "Simplice", "target": "Valjean", "value": 3 }, 152 | { "source": "Simplice", "target": "Fantine", "value": 2 }, 153 | { "source": "Simplice", "target": "Javert", "value": 1 }, 154 | { "source": "Scaufflaire", "target": "Valjean", "value": 1 }, 155 | { "source": "Woman1", "target": "Valjean", "value": 2 }, 156 | { "source": "Woman1", "target": "Javert", "value": 1 }, 157 | { "source": "Judge", "target": "Valjean", "value": 3 }, 158 | { "source": "Judge", "target": "Bamatabois", "value": 2 }, 159 | { "source": "Champmathieu", "target": "Valjean", "value": 3 }, 160 | { "source": "Champmathieu", "target": "Judge", "value": 3 }, 161 | { "source": "Champmathieu", "target": "Bamatabois", "value": 2 }, 162 | { "source": "Brevet", "target": "Judge", "value": 2 }, 163 | { "source": "Brevet", "target": "Champmathieu", "value": 2 }, 164 | { "source": "Brevet", "target": "Valjean", "value": 2 }, 165 | { "source": "Brevet", "target": "Bamatabois", "value": 1 }, 166 | { "source": "Chenildieu", "target": "Judge", "value": 2 }, 167 | { "source": "Chenildieu", "target": "Champmathieu", "value": 2 }, 168 | { "source": "Chenildieu", "target": "Brevet", "value": 2 }, 169 | { "source": "Chenildieu", "target": "Valjean", "value": 2 }, 170 | { "source": "Chenildieu", "target": "Bamatabois", "value": 1 }, 171 | { "source": "Cochepaille", "target": "Judge", "value": 2 }, 172 | { "source": "Cochepaille", "target": "Champmathieu", "value": 2 }, 173 | { "source": "Cochepaille", "target": "Brevet", "value": 2 }, 174 | { "source": "Cochepaille", "target": "Chenildieu", "value": 2 }, 175 | { "source": "Cochepaille", "target": "Valjean", "value": 2 }, 176 | { "source": "Cochepaille", "target": "Bamatabois", "value": 1 }, 177 | { "source": "Pontmercy", "target": "Thenardier", "value": 1 }, 178 | { "source": "Boulatruelle", "target": "Thenardier", "value": 1 }, 179 | { "source": "Eponine", "target": "Mme.Thenardier", "value": 2 }, 180 | { "source": "Eponine", "target": "Thenardier", "value": 3 }, 181 | { "source": "Anzelma", "target": "Eponine", "value": 2 }, 182 | { "source": "Anzelma", "target": "Thenardier", "value": 2 }, 183 | { "source": "Anzelma", "target": "Mme.Thenardier", "value": 1 }, 184 | { "source": "Woman2", "target": "Valjean", "value": 3 }, 185 | { "source": "Woman2", "target": "Cosette", "value": 1 }, 186 | { "source": "Woman2", "target": "Javert", "value": 1 }, 187 | { "source": "MotherInnocent", "target": "Fauchelevent", "value": 3 }, 188 | { "source": "MotherInnocent", "target": "Valjean", "value": 1 }, 189 | { "source": "Gribier", "target": "Fauchelevent", "value": 2 }, 190 | { "source": "Mme.Burgon", "target": "Jondrette", "value": 1 }, 191 | { "source": "Gavroche", "target": "Mme.Burgon", "value": 2 }, 192 | { "source": "Gavroche", "target": "Thenardier", "value": 1 }, 193 | { "source": "Gavroche", "target": "Javert", "value": 1 }, 194 | { "source": "Gavroche", "target": "Valjean", "value": 1 }, 195 | { "source": "Gillenormand", "target": "Cosette", "value": 3 }, 196 | { "source": "Gillenormand", "target": "Valjean", "value": 2 }, 197 | { "source": "Magnon", "target": "Gillenormand", "value": 1 }, 198 | { "source": "Magnon", "target": "Mme.Thenardier", "value": 1 }, 199 | { "source": "Mlle.Gillenormand", "target": "Gillenormand", "value": 9 }, 200 | { "source": "Mlle.Gillenormand", "target": "Cosette", "value": 2 }, 201 | { "source": "Mlle.Gillenormand", "target": "Valjean", "value": 2 }, 202 | { "source": "Mme.Pontmercy", "target": "Mlle.Gillenormand", "value": 1 }, 203 | { "source": "Mme.Pontmercy", "target": "Pontmercy", "value": 1 }, 204 | { "source": "Mlle.Vaubois", "target": "Mlle.Gillenormand", "value": 1 }, 205 | { "source": "Lt.Gillenormand", "target": "Mlle.Gillenormand", "value": 2 }, 206 | { "source": "Lt.Gillenormand", "target": "Gillenormand", "value": 1 }, 207 | { "source": "Lt.Gillenormand", "target": "Cosette", "value": 1 }, 208 | { "source": "Marius", "target": "Mlle.Gillenormand", "value": 6 }, 209 | { "source": "Marius", "target": "Gillenormand", "value": 12 }, 210 | { "source": "Marius", "target": "Pontmercy", "value": 1 }, 211 | { "source": "Marius", "target": "Lt.Gillenormand", "value": 1 }, 212 | { "source": "Marius", "target": "Cosette", "value": 21 }, 213 | { "source": "Marius", "target": "Valjean", "value": 19 }, 214 | { "source": "Marius", "target": "Tholomyes", "value": 1 }, 215 | { "source": "Marius", "target": "Thenardier", "value": 2 }, 216 | { "source": "Marius", "target": "Eponine", "value": 5 }, 217 | { "source": "Marius", "target": "Gavroche", "value": 4 }, 218 | { "source": "BaronessT", "target": "Gillenormand", "value": 1 }, 219 | { "source": "BaronessT", "target": "Marius", "value": 1 }, 220 | { "source": "Mabeuf", "target": "Marius", "value": 1 }, 221 | { "source": "Mabeuf", "target": "Eponine", "value": 1 }, 222 | { "source": "Mabeuf", "target": "Gavroche", "value": 1 }, 223 | { "source": "Enjolras", "target": "Marius", "value": 7 }, 224 | { "source": "Enjolras", "target": "Gavroche", "value": 7 }, 225 | { "source": "Enjolras", "target": "Javert", "value": 6 }, 226 | { "source": "Enjolras", "target": "Mabeuf", "value": 1 }, 227 | { "source": "Enjolras", "target": "Valjean", "value": 4 }, 228 | { "source": "Combeferre", "target": "Enjolras", "value": 15 }, 229 | { "source": "Combeferre", "target": "Marius", "value": 5 }, 230 | { "source": "Combeferre", "target": "Gavroche", "value": 6 }, 231 | { "source": "Combeferre", "target": "Mabeuf", "value": 2 }, 232 | { "source": "Prouvaire", "target": "Gavroche", "value": 1 }, 233 | { "source": "Prouvaire", "target": "Enjolras", "value": 4 }, 234 | { "source": "Prouvaire", "target": "Combeferre", "value": 2 }, 235 | { "source": "Feuilly", "target": "Gavroche", "value": 2 }, 236 | { "source": "Feuilly", "target": "Enjolras", "value": 6 }, 237 | { "source": "Feuilly", "target": "Prouvaire", "value": 2 }, 238 | { "source": "Feuilly", "target": "Combeferre", "value": 5 }, 239 | { "source": "Feuilly", "target": "Mabeuf", "value": 1 }, 240 | { "source": "Feuilly", "target": "Marius", "value": 1 }, 241 | { "source": "Courfeyrac", "target": "Marius", "value": 9 }, 242 | { "source": "Courfeyrac", "target": "Enjolras", "value": 17 }, 243 | { "source": "Courfeyrac", "target": "Combeferre", "value": 13 }, 244 | { "source": "Courfeyrac", "target": "Gavroche", "value": 7 }, 245 | { "source": "Courfeyrac", "target": "Mabeuf", "value": 2 }, 246 | { "source": "Courfeyrac", "target": "Eponine", "value": 1 }, 247 | { "source": "Courfeyrac", "target": "Feuilly", "value": 6 }, 248 | { "source": "Courfeyrac", "target": "Prouvaire", "value": 3 }, 249 | { "source": "Bahorel", "target": "Combeferre", "value": 5 }, 250 | { "source": "Bahorel", "target": "Gavroche", "value": 5 }, 251 | { "source": "Bahorel", "target": "Courfeyrac", "value": 6 }, 252 | { "source": "Bahorel", "target": "Mabeuf", "value": 2 }, 253 | { "source": "Bahorel", "target": "Enjolras", "value": 4 }, 254 | { "source": "Bahorel", "target": "Feuilly", "value": 3 }, 255 | { "source": "Bahorel", "target": "Prouvaire", "value": 2 }, 256 | { "source": "Bahorel", "target": "Marius", "value": 1 }, 257 | { "source": "Bossuet", "target": "Marius", "value": 5 }, 258 | { "source": "Bossuet", "target": "Courfeyrac", "value": 12 }, 259 | { "source": "Bossuet", "target": "Gavroche", "value": 5 }, 260 | { "source": "Bossuet", "target": "Bahorel", "value": 4 }, 261 | { "source": "Bossuet", "target": "Enjolras", "value": 10 }, 262 | { "source": "Bossuet", "target": "Feuilly", "value": 6 }, 263 | { "source": "Bossuet", "target": "Prouvaire", "value": 2 }, 264 | { "source": "Bossuet", "target": "Combeferre", "value": 9 }, 265 | { "source": "Bossuet", "target": "Mabeuf", "value": 1 }, 266 | { "source": "Bossuet", "target": "Valjean", "value": 1 }, 267 | { "source": "Joly", "target": "Bahorel", "value": 5 }, 268 | { "source": "Joly", "target": "Bossuet", "value": 7 }, 269 | { "source": "Joly", "target": "Gavroche", "value": 3 }, 270 | { "source": "Joly", "target": "Courfeyrac", "value": 5 }, 271 | { "source": "Joly", "target": "Enjolras", "value": 5 }, 272 | { "source": "Joly", "target": "Feuilly", "value": 5 }, 273 | { "source": "Joly", "target": "Prouvaire", "value": 2 }, 274 | { "source": "Joly", "target": "Combeferre", "value": 5 }, 275 | { "source": "Joly", "target": "Mabeuf", "value": 1 }, 276 | { "source": "Joly", "target": "Marius", "value": 2 }, 277 | { "source": "Grantaire", "target": "Bossuet", "value": 3 }, 278 | { "source": "Grantaire", "target": "Enjolras", "value": 3 }, 279 | { "source": "Grantaire", "target": "Combeferre", "value": 1 }, 280 | { "source": "Grantaire", "target": "Courfeyrac", "value": 2 }, 281 | { "source": "Grantaire", "target": "Joly", "value": 2 }, 282 | { "source": "Grantaire", "target": "Gavroche", "value": 1 }, 283 | { "source": "Grantaire", "target": "Bahorel", "value": 1 }, 284 | { "source": "Grantaire", "target": "Feuilly", "value": 1 }, 285 | { "source": "Grantaire", "target": "Prouvaire", "value": 1 }, 286 | { "source": "MotherPlutarch", "target": "Mabeuf", "value": 3 }, 287 | { "source": "Gueulemer", "target": "Thenardier", "value": 5 }, 288 | { "source": "Gueulemer", "target": "Valjean", "value": 1 }, 289 | { "source": "Gueulemer", "target": "Mme.Thenardier", "value": 1 }, 290 | { "source": "Gueulemer", "target": "Javert", "value": 1 }, 291 | { "source": "Gueulemer", "target": "Gavroche", "value": 1 }, 292 | { "source": "Gueulemer", "target": "Eponine", "value": 1 }, 293 | { "source": "Babet", "target": "Thenardier", "value": 6 }, 294 | { "source": "Babet", "target": "Gueulemer", "value": 6 }, 295 | { "source": "Babet", "target": "Valjean", "value": 1 }, 296 | { "source": "Babet", "target": "Mme.Thenardier", "value": 1 }, 297 | { "source": "Babet", "target": "Javert", "value": 2 }, 298 | { "source": "Babet", "target": "Gavroche", "value": 1 }, 299 | { "source": "Babet", "target": "Eponine", "value": 1 }, 300 | { "source": "Claquesous", "target": "Thenardier", "value": 4 }, 301 | { "source": "Claquesous", "target": "Babet", "value": 4 }, 302 | { "source": "Claquesous", "target": "Gueulemer", "value": 4 }, 303 | { "source": "Claquesous", "target": "Valjean", "value": 1 }, 304 | { "source": "Claquesous", "target": "Mme.Thenardier", "value": 1 }, 305 | { "source": "Claquesous", "target": "Javert", "value": 1 }, 306 | { "source": "Claquesous", "target": "Eponine", "value": 1 }, 307 | { "source": "Claquesous", "target": "Enjolras", "value": 1 }, 308 | { "source": "Montparnasse", "target": "Javert", "value": 1 }, 309 | { "source": "Montparnasse", "target": "Babet", "value": 2 }, 310 | { "source": "Montparnasse", "target": "Gueulemer", "value": 2 }, 311 | { "source": "Montparnasse", "target": "Claquesous", "value": 2 }, 312 | { "source": "Montparnasse", "target": "Valjean", "value": 1 }, 313 | { "source": "Montparnasse", "target": "Gavroche", "value": 1 }, 314 | { "source": "Montparnasse", "target": "Eponine", "value": 1 }, 315 | { "source": "Montparnasse", "target": "Thenardier", "value": 1 }, 316 | { "source": "Toussaint", "target": "Cosette", "value": 2 }, 317 | { "source": "Toussaint", "target": "Javert", "value": 1 }, 318 | { "source": "Toussaint", "target": "Valjean", "value": 1 }, 319 | { "source": "Child1", "target": "Gavroche", "value": 2 }, 320 | { "source": "Child2", "target": "Gavroche", "value": 2 }, 321 | { "source": "Child2", "target": "Child1", "value": 3 }, 322 | { "source": "Brujon", "target": "Babet", "value": 3 }, 323 | { "source": "Brujon", "target": "Gueulemer", "value": 3 }, 324 | { "source": "Brujon", "target": "Thenardier", "value": 3 }, 325 | { "source": "Brujon", "target": "Gavroche", "value": 1 }, 326 | { "source": "Brujon", "target": "Eponine", "value": 1 }, 327 | { "source": "Brujon", "target": "Claquesous", "value": 1 }, 328 | { "source": "Brujon", "target": "Montparnasse", "value": 1 }, 329 | { "source": "Mme.Hucheloup", "target": "Bossuet", "value": 1 }, 330 | { "source": "Mme.Hucheloup", "target": "Joly", "value": 1 }, 331 | { "source": "Mme.Hucheloup", "target": "Grantaire", "value": 1 }, 332 | { "source": "Mme.Hucheloup", "target": "Bahorel", "value": 1 }, 333 | { "source": "Mme.Hucheloup", "target": "Courfeyrac", "value": 1 }, 334 | { "source": "Mme.Hucheloup", "target": "Gavroche", "value": 1 }, 335 | { "source": "Mme.Hucheloup", "target": "Enjolras", "value": 1 } 336 | ] 337 | } 338 | -------------------------------------------------------------------------------- /public/data/apple-stock.csv: -------------------------------------------------------------------------------- 1 | date,close 2 | 2007-04-23,93.24 3 | 2007-04-24,95.35 4 | 2007-04-25,98.84 5 | 2007-04-26,99.92 6 | 2007-04-29,99.8 7 | 2007-05-01,99.47 8 | 2007-05-02,100.39 9 | 2007-05-03,100.4 10 | 2007-05-04,100.81 11 | 2007-05-07,103.92 12 | 2007-05-08,105.06 13 | 2007-05-09,106.88 14 | 2007-05-09,107.34 15 | 2007-05-10,108.74 16 | 2007-05-13,109.36 17 | 2007-05-14,107.52 18 | 2007-05-15,107.34 19 | 2007-05-16,109.44 20 | 2007-05-17,110.02 21 | 2007-05-20,111.98 22 | 2007-05-21,113.54 23 | 2007-05-22,112.89 24 | 2007-05-23,110.69 25 | 2007-05-24,113.62 26 | 2007-05-28,114.35 27 | 2007-05-29,118.77 28 | 2007-05-30,121.19 29 | 2007-06-01,118.4 30 | 2007-06-04,121.33 31 | 2007-06-05,122.67 32 | 2007-06-06,123.64 33 | 2007-06-07,124.07 34 | 2007-06-08,124.49 35 | 2007-06-10,120.19 36 | 2007-06-11,120.38 37 | 2007-06-12,117.5 38 | 2007-06-13,118.75 39 | 2007-06-14,120.5 40 | 2007-06-17,125.09 41 | 2007-06-18,123.66 42 | 2007-06-19,121.55 43 | 2007-06-20,123.9 44 | 2007-06-21,123 45 | 2007-06-24,122.34 46 | 2007-06-25,119.65 47 | 2007-06-26,121.89 48 | 2007-06-27,120.56 49 | 2007-06-28,122.04 50 | 2007-07-02,121.26 51 | 2007-07-03,127.17 52 | 2007-07-05,132.75 53 | 2007-07-06,132.3 54 | 2007-07-09,130.33 55 | 2007-07-09,132.35 56 | 2007-07-10,132.39 57 | 2007-07-11,134.07 58 | 2007-07-12,137.73 59 | 2007-07-15,138.1 60 | 2007-07-16,138.91 61 | 2007-07-17,138.12 62 | 2007-07-18,140 63 | 2007-07-19,143.75 64 | 2007-07-22,143.7 65 | 2007-07-23,134.89 66 | 2007-07-24,137.26 67 | 2007-07-25,146 68 | 2007-07-26,143.85 69 | 2007-07-29,141.43 70 | 2007-07-30,131.76 71 | 2007-08-01,135 72 | 2007-08-02,136.49 73 | 2007-08-03,131.85 74 | 2007-08-06,135.25 75 | 2007-08-07,135.03 76 | 2007-08-08,134.01 77 | 2007-08-09,126.39 78 | 2007-08-09,125 79 | 2007-08-12,127.79 80 | 2007-08-13,124.03 81 | 2007-08-14,119.9 82 | 2007-08-15,117.05 83 | 2007-08-16,122.06 84 | 2007-08-19,122.22 85 | 2007-08-20,127.57 86 | 2007-08-21,132.51 87 | 2007-08-22,131.07 88 | 2007-08-23,135.3 89 | 2007-08-26,132.25 90 | 2007-08-27,126.82 91 | 2007-08-28,134.08 92 | 2007-08-29,136.25 93 | 2007-08-30,138.48 94 | 2007-09-04,144.16 95 | 2007-09-05,136.76 96 | 2007-09-06,135.01 97 | 2007-09-07,131.77 98 | 2007-09-09,136.71 99 | 2007-09-10,135.49 100 | 2007-09-11,136.85 101 | 2007-09-12,137.2 102 | 2007-09-13,138.81 103 | 2007-09-16,138.41 104 | 2007-09-17,140.92 105 | 2007-09-18,140.77 106 | 2007-09-19,140.31 107 | 2007-09-20,144.15 108 | 2007-09-23,148.28 109 | 2007-09-24,153.18 110 | 2007-09-25,152.77 111 | 2007-09-26,154.5 112 | 2007-09-27,153.47 113 | 2007-10-01,156.34 114 | 2007-10-02,158.45 115 | 2007-10-03,157.92 116 | 2007-10-04,156.24 117 | 2007-10-05,161.45 118 | 2007-10-08,167.91 119 | 2007-10-09,167.86 120 | 2007-10-09,166.79 121 | 2007-10-10,162.23 122 | 2007-10-11,167.25 123 | 2007-10-14,166.98 124 | 2007-10-15,169.58 125 | 2007-10-16,172.75 126 | 2007-10-17,173.5 127 | 2007-10-18,170.42 128 | 2007-10-21,174.36 129 | 2007-10-22,186.16 130 | 2007-10-23,185.93 131 | 2007-10-24,182.78 132 | 2007-10-25,184.7 133 | 2007-10-28,185.09 134 | 2007-10-29,187 135 | 2007-10-30,189.95 136 | 2007-11-01,187.44 137 | 2007-11-02,187.87 138 | 2007-11-05,186.18 139 | 2007-11-06,191.79 140 | 2007-11-07,186.3 141 | 2007-11-08,175.47 142 | 2007-11-09,165.37 143 | 2007-11-11,153.76 144 | 2007-11-12,169.96 145 | 2007-11-13,166.11 146 | 2007-11-14,164.3 147 | 2007-11-15,166.39 148 | 2007-11-18,163.95 149 | 2007-11-19,168.85 150 | 2007-11-20,168.46 151 | 2007-11-22,171.54 152 | 2007-11-25,172.54 153 | 2007-11-26,174.81 154 | 2007-11-27,180.22 155 | 2007-11-28,184.29 156 | 2007-11-29,182.22 157 | 2007-12-03,178.86 158 | 2007-12-04,179.81 159 | 2007-12-05,185.5 160 | 2007-12-06,189.95 161 | 2007-12-07,194.3 162 | 2007-12-09,194.21 163 | 2007-12-10,188.54 164 | 2007-12-11,190.86 165 | 2007-12-12,191.83 166 | 2007-12-13,190.39 167 | 2007-12-16,184.4 168 | 2007-12-17,182.98 169 | 2007-12-18,183.12 170 | 2007-12-19,187.21 171 | 2007-12-20,193.91 172 | 2007-12-23,198.8 173 | 2007-12-25,198.95 174 | 2007-12-26,198.57 175 | 2007-12-27,199.83 176 | 2007-12-30,198.08 177 | 2008-01-02,194.84 178 | 2008-01-03,194.93 179 | 2008-01-04,180.05 180 | 2008-01-07,177.64 181 | 2008-01-08,171.25 182 | 2008-01-09,179.4 183 | 2008-01-09,178.02 184 | 2008-01-10,172.69 185 | 2008-01-13,178.78 186 | 2008-01-14,169.04 187 | 2008-01-15,159.64 188 | 2008-01-16,160.89 189 | 2008-01-17,161.36 190 | 2008-01-21,155.64 191 | 2008-01-22,139.07 192 | 2008-01-23,135.6 193 | 2008-01-24,130.01 194 | 2008-01-27,130.01 195 | 2008-01-28,131.54 196 | 2008-01-29,132.18 197 | 2008-01-30,135.36 198 | 2008-02-01,133.75 199 | 2008-02-04,131.65 200 | 2008-02-05,129.36 201 | 2008-02-06,122 202 | 2008-02-07,121.24 203 | 2008-02-08,125.48 204 | 2008-02-10,129.45 205 | 2008-02-11,124.86 206 | 2008-02-12,129.4 207 | 2008-02-13,127.46 208 | 2008-02-14,124.63 209 | 2008-02-18,122.18 210 | 2008-02-19,123.82 211 | 2008-02-20,121.54 212 | 2008-02-21,119.46 213 | 2008-02-24,119.74 214 | 2008-02-25,119.15 215 | 2008-02-26,122.96 216 | 2008-02-27,129.91 217 | 2008-02-28,125.02 218 | 2008-03-03,121.73 219 | 2008-03-04,124.62 220 | 2008-03-05,124.49 221 | 2008-03-06,120.93 222 | 2008-03-07,122.25 223 | 2008-03-09,119.69 224 | 2008-03-10,127.35 225 | 2008-03-11,126.03 226 | 2008-03-12,127.94 227 | 2008-03-13,126.61 228 | 2008-03-16,126.73 229 | 2008-03-17,132.82 230 | 2008-03-18,129.67 231 | 2008-03-19,133.27 232 | 2008-03-23,139.53 233 | 2008-03-24,140.98 234 | 2008-03-25,145.06 235 | 2008-03-26,140.25 236 | 2008-03-27,143.01 237 | 2008-03-30,143.5 238 | 2008-04-01,149.53 239 | 2008-04-02,147.49 240 | 2008-04-03,151.61 241 | 2008-04-04,153.08 242 | 2008-04-07,155.89 243 | 2008-04-08,152.84 244 | 2008-04-09,151.44 245 | 2008-04-09,154.55 246 | 2008-04-10,147.14 247 | 2008-04-13,147.78 248 | 2008-04-14,148.38 249 | 2008-04-15,153.7 250 | 2008-04-16,154.49 251 | 2008-04-17,161.04 252 | 2008-04-20,168.16 253 | 2008-04-21,160.2 254 | 2008-04-22,162.89 255 | 2008-04-23,168.94 256 | 2008-04-24,169.73 257 | 2008-04-27,172.24 258 | 2008-04-28,175.05 259 | 2008-04-29,173.95 260 | 2008-05-01,180 261 | 2008-05-02,180.94 262 | 2008-05-05,184.73 263 | 2008-05-06,186.66 264 | 2008-05-07,182.59 265 | 2008-05-08,185.06 266 | 2008-05-09,183.45 267 | 2008-05-11,188.16 268 | 2008-05-12,189.96 269 | 2008-05-13,186.26 270 | 2008-05-14,189.73 271 | 2008-05-15,187.62 272 | 2008-05-18,183.6 273 | 2008-05-19,185.9 274 | 2008-05-20,178.19 275 | 2008-05-21,177.05 276 | 2008-05-22,181.17 277 | 2008-05-26,186.43 278 | 2008-05-27,187.01 279 | 2008-05-28,186.69 280 | 2008-05-29,188.75 281 | 2008-06-02,186.1 282 | 2008-06-03,185.37 283 | 2008-06-04,185.19 284 | 2008-06-05,189.43 285 | 2008-06-06,185.64 286 | 2008-06-09,181.61 287 | 2008-06-09,185.64 288 | 2008-06-10,180.81 289 | 2008-06-11,173.26 290 | 2008-06-12,172.37 291 | 2008-06-15,176.84 292 | 2008-06-16,181.43 293 | 2008-06-17,178.75 294 | 2008-06-18,180.9 295 | 2008-06-19,175.27 296 | 2008-06-22,173.16 297 | 2008-06-23,173.25 298 | 2008-06-24,177.39 299 | 2008-06-25,168.26 300 | 2008-06-26,170.09 301 | 2008-06-29,167.44 302 | 2008-07-01,174.68 303 | 2008-07-02,168.18 304 | 2008-07-03,170.12 305 | 2008-07-07,175.16 306 | 2008-07-08,179.55 307 | 2008-07-09,174.25 308 | 2008-07-09,176.63 309 | 2008-07-10,172.58 310 | 2008-07-13,173.88 311 | 2008-07-14,169.64 312 | 2008-07-15,172.81 313 | 2008-07-16,171.81 314 | 2008-07-17,165.15 315 | 2008-07-20,166.29 316 | 2008-07-21,162.02 317 | 2008-07-22,166.26 318 | 2008-07-23,159.03 319 | 2008-07-24,162.12 320 | 2008-07-27,154.4 321 | 2008-07-28,157.08 322 | 2008-07-29,159.88 323 | 2008-07-30,158.95 324 | 2008-08-01,156.66 325 | 2008-08-04,153.23 326 | 2008-08-05,160.64 327 | 2008-08-06,164.19 328 | 2008-08-07,163.57 329 | 2008-08-08,169.55 330 | 2008-08-10,173.56 331 | 2008-08-11,176.73 332 | 2008-08-12,179.3 333 | 2008-08-13,179.32 334 | 2008-08-14,175.74 335 | 2008-08-17,175.39 336 | 2008-08-18,173.53 337 | 2008-08-19,175.84 338 | 2008-08-20,174.29 339 | 2008-08-21,176.79 340 | 2008-08-24,172.55 341 | 2008-08-25,173.64 342 | 2008-08-26,174.67 343 | 2008-08-27,173.74 344 | 2008-08-28,169.53 345 | 2008-09-02,166.19 346 | 2008-09-03,166.96 347 | 2008-09-04,161.22 348 | 2008-09-05,160.18 349 | 2008-09-08,157.92 350 | 2008-09-09,151.68 351 | 2008-09-09,151.61 352 | 2008-09-10,152.65 353 | 2008-09-11,148.94 354 | 2008-09-14,140.36 355 | 2008-09-15,139.88 356 | 2008-09-16,127.83 357 | 2008-09-17,134.09 358 | 2008-09-18,140.91 359 | 2008-09-21,131.05 360 | 2008-09-22,126.84 361 | 2008-09-23,128.71 362 | 2008-09-24,131.93 363 | 2008-09-25,128.24 364 | 2008-09-28,105.26 365 | 2008-09-29,113.66 366 | 2008-10-01,109.12 367 | 2008-10-02,100.1 368 | 2008-10-03,97.07 369 | 2008-10-06,98.14 370 | 2008-10-07,89.16 371 | 2008-10-08,89.79 372 | 2008-10-09,88.74 373 | 2008-10-09,96.8 374 | 2008-10-12,110.26 375 | 2008-10-13,104.08 376 | 2008-10-14,97.95 377 | 2008-10-15,101.89 378 | 2008-10-16,97.4 379 | 2008-10-19,98.44 380 | 2008-10-20,91.49 381 | 2008-10-21,96.87 382 | 2008-10-22,98.23 383 | 2008-10-23,96.38 384 | 2008-10-26,92.09 385 | 2008-10-27,99.91 386 | 2008-10-28,104.55 387 | 2008-10-29,111.04 388 | 2008-10-30,107.59 389 | 2008-11-03,106.96 390 | 2008-11-04,110.99 391 | 2008-11-05,103.3 392 | 2008-11-06,99.1 393 | 2008-11-07,98.24 394 | 2008-11-09,95.88 395 | 2008-11-10,94.77 396 | 2008-11-11,90.12 397 | 2008-11-12,96.44 398 | 2008-11-13,90.24 399 | 2008-11-16,88.14 400 | 2008-11-17,89.91 401 | 2008-11-18,86.29 402 | 2008-11-19,80.49 403 | 2008-11-20,82.58 404 | 2008-11-23,92.95 405 | 2008-11-24,90.8 406 | 2008-11-25,95 407 | 2008-11-26,95 408 | 2008-11-27,92.67 409 | 2008-12-01,88.93 410 | 2008-12-02,92.47 411 | 2008-12-03,95.9 412 | 2008-12-04,91.41 413 | 2008-12-05,94 414 | 2008-12-08,99.72 415 | 2008-12-09,100.06 416 | 2008-12-09,98.21 417 | 2008-12-10,95 418 | 2008-12-11,98.27 419 | 2008-12-14,94.75 420 | 2008-12-15,95.43 421 | 2008-12-16,89.16 422 | 2008-12-17,89.43 423 | 2008-12-18,90 424 | 2008-12-21,85.74 425 | 2008-12-22,86.38 426 | 2008-12-23,85.04 427 | 2008-12-24,85.04 428 | 2008-12-25,85.81 429 | 2008-12-28,86.61 430 | 2008-12-29,86.29 431 | 2008-12-30,85.35 432 | 2009-01-01,85.35 433 | 2009-01-02,90.75 434 | 2009-01-05,94.58 435 | 2009-01-06,93.02 436 | 2009-01-07,91.01 437 | 2009-01-08,92.7 438 | 2009-01-09,90.58 439 | 2009-01-11,88.66 440 | 2009-01-12,87.71 441 | 2009-01-13,85.33 442 | 2009-01-14,83.38 443 | 2009-01-15,82.33 444 | 2009-01-19,78.2 445 | 2009-01-20,82.83 446 | 2009-01-21,88.36 447 | 2009-01-22,88.36 448 | 2009-01-25,89.64 449 | 2009-01-26,90.73 450 | 2009-01-27,94.2 451 | 2009-01-28,93 452 | 2009-01-29,90.13 453 | 2009-02-02,91.51 454 | 2009-02-03,92.98 455 | 2009-02-04,93.55 456 | 2009-02-05,96.46 457 | 2009-02-06,99.72 458 | 2009-02-09,102.51 459 | 2009-02-09,97.83 460 | 2009-02-10,96.82 461 | 2009-02-11,99.27 462 | 2009-02-12,99.16 463 | 2009-02-16,94.53 464 | 2009-02-17,94.37 465 | 2009-02-18,90.64 466 | 2009-02-19,91.2 467 | 2009-02-22,86.95 468 | 2009-02-23,90.25 469 | 2009-02-24,91.16 470 | 2009-02-25,89.19 471 | 2009-02-26,89.31 472 | 2009-03-02,87.94 473 | 2009-03-03,88.37 474 | 2009-03-04,91.17 475 | 2009-03-05,88.84 476 | 2009-03-06,85.3 477 | 2009-03-09,83.11 478 | 2009-03-09,88.63 479 | 2009-03-10,92.68 480 | 2009-03-11,96.35 481 | 2009-03-12,95.93 482 | 2009-03-15,95.42 483 | 2009-03-16,99.66 484 | 2009-03-17,101.52 485 | 2009-03-18,101.62 486 | 2009-03-19,101.59 487 | 2009-03-22,107.66 488 | 2009-03-23,106.5 489 | 2009-03-24,106.49 490 | 2009-03-25,109.87 491 | 2009-03-26,106.85 492 | 2009-03-29,104.49 493 | 2009-03-30,105.12 494 | 2009-04-01,108.69 495 | 2009-04-02,112.71 496 | 2009-04-03,115.99 497 | 2009-04-06,118.45 498 | 2009-04-07,115 499 | 2009-04-08,116.32 500 | 2009-04-09,119.57 501 | 2009-04-09,119.57 502 | 2009-04-12,120.22 503 | 2009-04-13,118.31 504 | 2009-04-14,117.64 505 | 2009-04-15,121.45 506 | 2009-04-16,123.42 507 | 2009-04-19,120.5 508 | 2009-04-20,121.76 509 | 2009-04-21,121.51 510 | 2009-04-22,125.4 511 | 2009-04-23,123.9 512 | 2009-04-26,124.73 513 | 2009-04-27,123.9 514 | 2009-04-28,125.14 515 | 2009-04-29,125.83 516 | 2009-05-01,127.24 517 | 2009-05-04,132.07 518 | 2009-05-05,132.71 519 | 2009-05-06,132.5 520 | 2009-05-07,129.06 521 | 2009-05-08,129.19 522 | 2009-05-10,129.57 523 | 2009-05-11,124.42 524 | 2009-05-12,119.49 525 | 2009-05-13,122.95 526 | 2009-05-14,122.42 527 | 2009-05-17,126.65 528 | 2009-05-18,127.45 529 | 2009-05-19,125.87 530 | 2009-05-20,124.18 531 | 2009-05-21,122.5 532 | 2009-05-25,130.78 533 | 2009-05-26,133.05 534 | 2009-05-27,135.07 535 | 2009-05-28,135.81 536 | 2009-06-01,139.35 537 | 2009-06-02,139.49 538 | 2009-06-03,140.95 539 | 2009-06-04,143.74 540 | 2009-06-05,144.67 541 | 2009-06-08,143.85 542 | 2009-06-09,142.72 543 | 2009-06-09,140.25 544 | 2009-06-10,139.95 545 | 2009-06-11,136.97 546 | 2009-06-14,136.09 547 | 2009-06-15,136.35 548 | 2009-06-16,135.58 549 | 2009-06-17,135.88 550 | 2009-06-18,139.48 551 | 2009-06-21,137.37 552 | 2009-06-22,134.01 553 | 2009-06-23,136.22 554 | 2009-06-24,139.86 555 | 2009-06-25,142.44 556 | 2009-06-28,141.97 557 | 2009-06-29,142.43 558 | 2009-07-01,142.83 559 | 2009-07-02,140.02 560 | 2009-07-03,140.02 561 | 2009-07-06,138.61 562 | 2009-07-07,135.4 563 | 2009-07-08,137.22 564 | 2009-07-09,136.36 565 | 2009-07-09,138.52 566 | 2009-07-12,142.34 567 | 2009-07-13,142.27 568 | 2009-07-14,146.88 569 | 2009-07-15,147.52 570 | 2009-07-16,151.75 571 | 2009-07-19,152.91 572 | 2009-07-20,151.51 573 | 2009-07-21,156.74 574 | 2009-07-22,157.82 575 | 2009-07-23,159.99 576 | 2009-07-26,160.1 577 | 2009-07-27,160 578 | 2009-07-28,160.03 579 | 2009-07-29,162.79 580 | 2009-07-30,163.39 581 | 2009-08-03,166.43 582 | 2009-08-04,165.55 583 | 2009-08-05,165.11 584 | 2009-08-06,163.91 585 | 2009-08-07,165.51 586 | 2009-08-09,164.72 587 | 2009-08-11,165.31 588 | 2009-08-12,168.42 589 | 2009-08-13,166.78 590 | 2009-08-16,159.59 591 | 2009-08-17,164 592 | 2009-08-18,164.6 593 | 2009-08-19,166.33 594 | 2009-08-20,169.22 595 | 2009-08-23,169.06 596 | 2009-08-24,169.4 597 | 2009-08-25,167.41 598 | 2009-08-26,169.45 599 | 2009-08-27,170.05 600 | 2009-08-30,168.21 601 | 2009-09-01,165.3 602 | 2009-09-02,165.18 603 | 2009-09-03,166.55 604 | 2009-09-04,170.31 605 | 2009-09-08,172.93 606 | 2009-09-09,171.14 607 | 2009-09-09,172.56 608 | 2009-09-10,172.16 609 | 2009-09-13,173.72 610 | 2009-09-14,175.16 611 | 2009-09-15,181.87 612 | 2009-09-16,184.55 613 | 2009-09-17,185.02 614 | 2009-09-20,184.02 615 | 2009-09-21,184.48 616 | 2009-09-22,185.5 617 | 2009-09-23,183.82 618 | 2009-09-24,182.37 619 | 2009-09-27,186.15 620 | 2009-09-28,185.38 621 | 2009-09-29,185.35 622 | 2009-10-01,180.86 623 | 2009-10-02,184.9 624 | 2009-10-05,186.02 625 | 2009-10-06,190.01 626 | 2009-10-07,190.25 627 | 2009-10-08,189.27 628 | 2009-10-09,190.47 629 | 2009-10-11,190.81 630 | 2009-10-12,190.02 631 | 2009-10-13,191.29 632 | 2009-10-14,190.56 633 | 2009-10-15,188.05 634 | 2009-10-18,189.86 635 | 2009-10-19,198.76 636 | 2009-10-20,204.92 637 | 2009-10-21,205.2 638 | 2009-10-22,203.94 639 | 2009-10-25,202.48 640 | 2009-10-26,197.37 641 | 2009-10-27,192.4 642 | 2009-10-28,196.35 643 | 2009-10-29,188.5 644 | 2009-11-02,189.31 645 | 2009-11-03,188.75 646 | 2009-11-04,190.81 647 | 2009-11-05,194.03 648 | 2009-11-06,194.34 649 | 2009-11-09,201.46 650 | 2009-11-09,202.98 651 | 2009-11-10,203.25 652 | 2009-11-11,201.99 653 | 2009-11-12,204.45 654 | 2009-11-15,206.63 655 | 2009-11-16,207 656 | 2009-11-17,205.96 657 | 2009-11-18,200.51 658 | 2009-11-19,199.92 659 | 2009-11-22,205.88 660 | 2009-11-23,204.44 661 | 2009-11-24,204.19 662 | 2009-11-25,204.19 663 | 2009-11-26,200.59 664 | 2009-11-29,199.91 665 | 2009-12-01,196.97 666 | 2009-12-02,196.23 667 | 2009-12-03,196.48 668 | 2009-12-04,193.32 669 | 2009-12-07,188.95 670 | 2009-12-08,189.87 671 | 2009-12-09,197.8 672 | 2009-12-09,196.43 673 | 2009-12-10,194.67 674 | 2009-12-13,196.98 675 | 2009-12-14,194.17 676 | 2009-12-15,195.03 677 | 2009-12-16,191.86 678 | 2009-12-17,195.43 679 | 2009-12-20,198.23 680 | 2009-12-21,200.36 681 | 2009-12-22,202.1 682 | 2009-12-23,209.04 683 | 2009-12-24,209.04 684 | 2009-12-27,211.61 685 | 2009-12-28,209.1 686 | 2009-12-29,211.64 687 | 2009-12-30,210.73 688 | 2010-01-01,210.73 689 | 2010-01-04,214.01 690 | 2010-01-05,214.38 691 | 2010-01-06,210.97 692 | 2010-01-07,210.58 693 | 2010-01-08,211.98 694 | 2010-01-10,210.11 695 | 2010-01-11,207.72 696 | 2010-01-12,210.65 697 | 2010-01-13,209.43 698 | 2010-01-14,205.93 699 | 2010-01-17,205.93 700 | 2010-01-18,215.04 701 | 2010-01-19,211.72 702 | 2010-01-20,208.07 703 | 2010-01-21,197.75 704 | 2010-01-24,203.08 705 | 2010-01-25,205.94 706 | 2010-01-26,207.88 707 | 2010-01-27,199.29 708 | 2010-01-28,192.06 709 | 2010-02-01,194.73 710 | 2010-02-02,195.86 711 | 2010-02-03,199.23 712 | 2010-02-04,192.05 713 | 2010-02-05,195.46 714 | 2010-02-08,194.12 715 | 2010-02-09,196.19 716 | 2010-02-09,195.12 717 | 2010-02-10,198.67 718 | 2010-02-11,200.38 719 | 2010-02-14,200.38 720 | 2010-02-15,203.4 721 | 2010-02-16,202.55 722 | 2010-02-17,202.93 723 | 2010-02-18,201.67 724 | 2010-02-21,200.42 725 | 2010-02-22,197.06 726 | 2010-02-23,200.66 727 | 2010-02-24,202 728 | 2010-02-25,204.62 729 | 2010-03-01,208.99 730 | 2010-03-02,208.85 731 | 2010-03-03,209.33 732 | 2010-03-04,210.71 733 | 2010-03-05,218.95 734 | 2010-03-08,219.08 735 | 2010-03-09,223.02 736 | 2010-03-09,224.84 737 | 2010-03-10,225.5 738 | 2010-03-11,226.6 739 | 2010-03-14,223.84 740 | 2010-03-15,224.45 741 | 2010-03-16,224.12 742 | 2010-03-17,224.65 743 | 2010-03-18,222.25 744 | 2010-03-21,224.75 745 | 2010-03-22,228.36 746 | 2010-03-23,229.37 747 | 2010-03-24,226.65 748 | 2010-03-25,230.9 749 | 2010-03-28,232.39 750 | 2010-03-29,235.84 751 | 2010-03-30,235 752 | 2010-04-01,235.97 753 | 2010-04-02,235.97 754 | 2010-04-05,238.49 755 | 2010-04-06,239.54 756 | 2010-04-07,240.6 757 | 2010-04-08,239.95 758 | 2010-04-09,241.79 759 | 2010-04-11,242.29 760 | 2010-04-12,242.43 761 | 2010-04-13,245.69 762 | 2010-04-14,248.92 763 | 2010-04-15,247.4 764 | 2010-04-18,247.07 765 | 2010-04-19,244.59 766 | 2010-04-20,259.22 767 | 2010-04-21,266.47 768 | 2010-04-22,270.83 769 | 2010-04-25,269.5 770 | 2010-04-26,262.04 771 | 2010-04-27,261.6 772 | 2010-04-28,268.64 773 | 2010-04-29,261.09 774 | 2010-05-03,266.35 775 | 2010-05-04,258.68 776 | 2010-05-05,255.98 777 | 2010-05-06,246.25 778 | 2010-05-07,235.86 779 | 2010-05-09,253.99 780 | 2010-05-10,256.52 781 | 2010-05-11,262.09 782 | 2010-05-12,258.36 783 | 2010-05-13,253.82 784 | 2010-05-16,254.22 785 | 2010-05-17,252.36 786 | 2010-05-18,248.34 787 | 2010-05-19,237.76 788 | 2010-05-20,242.32 789 | 2010-05-23,246.76 790 | 2010-05-24,245.22 791 | 2010-05-25,244.11 792 | 2010-05-26,253.35 793 | 2010-05-27,256.88 794 | 2010-05-30,256.88 795 | 2010-06-01,260.83 796 | 2010-06-02,263.95 797 | 2010-06-03,263.12 798 | 2010-06-04,255.96 799 | 2010-06-07,250.94 800 | 2010-06-08,249.33 801 | 2010-06-09,243.2 802 | 2010-06-09,250.51 803 | 2010-06-10,253.51 804 | 2010-06-13,254.28 805 | 2010-06-14,259.69 806 | 2010-06-15,267.25 807 | 2010-06-16,271.87 808 | 2010-06-17,274.07 809 | 2010-06-20,270.17 810 | 2010-06-21,273.85 811 | 2010-06-22,270.97 812 | 2010-06-23,269 813 | 2010-06-24,266.7 814 | 2010-06-27,268.3 815 | 2010-06-28,256.17 816 | 2010-06-29,251.53 817 | 2010-07-01,248.48 818 | 2010-07-02,246.94 819 | 2010-07-05,246.94 820 | 2010-07-06,248.63 821 | 2010-07-07,258.66 822 | 2010-07-08,258.09 823 | 2010-07-09,259.62 824 | 2010-07-11,257.28 825 | 2010-07-12,251.8 826 | 2010-07-13,252.73 827 | 2010-07-14,251.45 828 | 2010-07-15,249.9 829 | 2010-07-18,245.58 830 | 2010-07-19,251.89 831 | 2010-07-20,254.24 832 | 2010-07-21,259.02 833 | 2010-07-22,259.94 834 | 2010-07-25,259.28 835 | 2010-07-26,264.08 836 | 2010-07-27,260.96 837 | 2010-07-28,258.11 838 | 2010-07-29,257.25 839 | 2010-08-02,261.85 840 | 2010-08-03,261.93 841 | 2010-08-04,262.98 842 | 2010-08-05,261.7 843 | 2010-08-06,260.09 844 | 2010-08-09,261.75 845 | 2010-08-09,259.41 846 | 2010-08-10,250.19 847 | 2010-08-11,251.79 848 | 2010-08-12,249.1 849 | 2010-08-15,247.64 850 | 2010-08-16,251.97 851 | 2010-08-17,253.07 852 | 2010-08-18,249.88 853 | 2010-08-19,249.64 854 | 2010-08-22,245.8 855 | 2010-08-23,239.93 856 | 2010-08-24,242.89 857 | 2010-08-25,240.28 858 | 2010-08-26,241.62 859 | 2010-08-29,242.5 860 | 2010-08-30,243.1 861 | 2010-09-01,250.33 862 | 2010-09-02,252.17 863 | 2010-09-03,258.77 864 | 2010-09-06,258.77 865 | 2010-09-07,257.81 866 | 2010-09-08,262.92 867 | 2010-09-09,263.07 868 | 2010-09-09,263.41 869 | 2010-09-12,267.04 870 | 2010-09-13,268.06 871 | 2010-09-14,270.22 872 | 2010-09-15,276.57 873 | 2010-09-16,275.37 874 | 2010-09-19,283.23 875 | 2010-09-20,283.77 876 | 2010-09-21,287.75 877 | 2010-09-22,288.92 878 | 2010-09-23,292.32 879 | 2010-09-26,291.16 880 | 2010-09-27,286.86 881 | 2010-09-28,287.37 882 | 2010-09-29,283.75 883 | 2010-10-01,282.52 884 | 2010-10-04,278.64 885 | 2010-10-05,288.94 886 | 2010-10-06,289.19 887 | 2010-10-07,289.22 888 | 2010-10-08,294.07 889 | 2010-10-10,295.36 890 | 2010-10-11,298.54 891 | 2010-10-12,300.14 892 | 2010-10-13,302.31 893 | 2010-10-14,314.74 894 | 2010-10-17,318 895 | 2010-10-18,309.49 896 | 2010-10-19,310.53 897 | 2010-10-20,309.52 898 | 2010-10-21,307.47 899 | 2010-10-24,308.84 900 | 2010-10-25,308.05 901 | 2010-10-26,307.83 902 | 2010-10-27,305.24 903 | 2010-10-28,300.98 904 | 2010-11-01,304.18 905 | 2010-11-02,309.36 906 | 2010-11-03,312.8 907 | 2010-11-04,318.27 908 | 2010-11-05,317.13 909 | 2010-11-08,318.62 910 | 2010-11-09,316.08 911 | 2010-11-09,318.03 912 | 2010-11-10,316.66 913 | 2010-11-11,308.03 914 | 2010-11-14,307.04 915 | 2010-11-15,301.59 916 | 2010-11-16,300.5 917 | 2010-11-17,308.43 918 | 2010-11-18,306.73 919 | 2010-11-21,313.36 920 | 2010-11-22,308.73 921 | 2010-11-23,314.8 922 | 2010-11-25,315 923 | 2010-11-28,316.87 924 | 2010-11-29,311.15 925 | 2010-12-01,316.4 926 | 2010-12-02,318.15 927 | 2010-12-03,317.44 928 | 2010-12-06,320.15 929 | 2010-12-07,318.21 930 | 2010-12-08,321.01 931 | 2010-12-09,319.76 932 | 2010-12-09,320.56 933 | 2010-12-12,321.67 934 | 2010-12-13,320.29 935 | 2010-12-14,320.36 936 | 2010-12-15,321.25 937 | 2010-12-16,320.61 938 | 2010-12-19,322.21 939 | 2010-12-20,324.2 940 | 2010-12-21,325.16 941 | 2010-12-22,323.6 942 | 2010-12-26,324.68 943 | 2010-12-27,325.47 944 | 2010-12-28,325.29 945 | 2010-12-29,323.66 946 | 2010-12-30,322.56 947 | 2011-01-03,329.57 948 | 2011-01-04,331.29 949 | 2011-01-05,334 950 | 2011-01-06,333.73 951 | 2011-01-07,336.12 952 | 2011-01-09,342.46 953 | 2011-01-10,341.64 954 | 2011-01-11,344.42 955 | 2011-01-12,345.68 956 | 2011-01-13,348.48 957 | 2011-01-17,340.65 958 | 2011-01-18,338.84 959 | 2011-01-19,332.68 960 | 2011-01-20,326.72 961 | 2011-01-23,337.45 962 | 2011-01-24,341.4 963 | 2011-01-25,343.85 964 | 2011-01-26,343.21 965 | 2011-01-27,336.1 966 | 2011-01-30,339.32 967 | 2011-02-01,345.03 968 | 2011-02-02,344.32 969 | 2011-02-03,343.44 970 | 2011-02-04,346.5 971 | 2011-02-07,351.88 972 | 2011-02-08,355.2 973 | 2011-02-09,358.16 974 | 2011-02-09,354.54 975 | 2011-02-10,356.85 976 | 2011-02-13,359.18 977 | 2011-02-14,359.9 978 | 2011-02-15,363.13 979 | 2011-02-16,358.3 980 | 2011-02-17,350.56 981 | 2011-02-21,338.61 982 | 2011-02-22,342.62 983 | 2011-02-23,342.88 984 | 2011-02-24,348.16 985 | 2011-02-27,353.21 986 | 2011-03-01,349.31 987 | 2011-03-02,352.12 988 | 2011-03-03,359.56 989 | 2011-03-04,360 990 | 2011-03-07,355.36 991 | 2011-03-08,355.76 992 | 2011-03-09,352.47 993 | 2011-03-09,346.67 994 | 2011-03-10,351.99 995 | 2011-03-13,353.56 996 | 2011-03-14,345.43 997 | 2011-03-15,330.01 998 | 2011-03-16,334.64 999 | 2011-03-17,330.67 1000 | 2011-03-20,339.3 1001 | 2011-03-21,341.2 1002 | 2011-03-22,339.19 1003 | 2011-03-23,344.97 1004 | 2011-03-24,351.54 1005 | 2011-03-27,350.44 1006 | 2011-03-28,350.96 1007 | 2011-03-29,348.63 1008 | 2011-03-30,348.51 1009 | 2011-04-01,344.56 1010 | 2011-04-04,341.19 1011 | 2011-04-05,338.89 1012 | 2011-04-06,338.04 1013 | 2011-04-07,338.08 1014 | 2011-04-08,335.06 1015 | 2011-04-10,330.8 1016 | 2011-04-11,332.4 1017 | 2011-04-12,336.13 1018 | 2011-04-13,332.42 1019 | 2011-04-14,327.46 1020 | 2011-04-17,331.85 1021 | 2011-04-18,337.86 1022 | 2011-04-19,342.41 1023 | 2011-04-20,350.7 1024 | 2011-04-24,353.01 1025 | 2011-04-25,350.42 1026 | 2011-04-26,350.15 1027 | 2011-04-27,346.75 1028 | 2011-04-28,350.13 1029 | 2011-05-02,346.28 1030 | 2011-05-03,348.2 1031 | 2011-05-04,349.57 1032 | 2011-05-05,346.75 1033 | 2011-05-06,346.66 1034 | 2011-05-09,347.6 1035 | 2011-05-09,349.45 1036 | 2011-05-10,347.23 1037 | 2011-05-11,346.57 1038 | 2011-05-12,340.5 1039 | 2011-05-15,333.3 1040 | 2011-05-16,336.14 1041 | 2011-05-17,339.87 1042 | 2011-05-18,340.53 1043 | 2011-05-19,335.22 1044 | 2011-05-22,334.4 1045 | 2011-05-23,332.19 1046 | 2011-05-24,336.78 1047 | 2011-05-25,335 1048 | 2011-05-26,337.41 1049 | 2011-05-30,347.83 1050 | 2011-06-01,345.51 1051 | 2011-06-02,346.1 1052 | 2011-06-03,343.44 1053 | 2011-06-06,338.04 1054 | 2011-06-07,332.04 1055 | 2011-06-08,332.24 1056 | 2011-06-09,331.49 1057 | 2011-06-09,325.9 1058 | 2011-06-12,326.6 1059 | 2011-06-13,332.44 1060 | 2011-06-14,326.75 1061 | 2011-06-15,325.16 1062 | 2011-06-16,320.26 1063 | 2011-06-19,315.32 1064 | 2011-06-20,325.3 1065 | 2011-06-21,322.61 1066 | 2011-06-22,331.23 1067 | 2011-06-23,326.35 1068 | 2011-06-26,332.04 1069 | 2011-06-27,335.26 1070 | 2011-06-28,334.04 1071 | 2011-06-29,335.67 1072 | 2011-07-01,343.26 1073 | 2011-07-05,349.43 1074 | 2011-07-06,351.76 1075 | 2011-07-07,357.2 1076 | 2011-07-08,359.71 1077 | 2011-07-10,354 1078 | 2011-07-11,353.75 1079 | 2011-07-12,358.02 1080 | 2011-07-13,357.77 1081 | 2011-07-14,364.92 1082 | 2011-07-17,373.8 1083 | 2011-07-18,376.85 1084 | 2011-07-19,386.9 1085 | 2011-07-20,387.29 1086 | 2011-07-21,393.3 1087 | 2011-07-24,398.5 1088 | 2011-07-25,403.41 1089 | 2011-07-26,392.59 1090 | 2011-07-27,391.82 1091 | 2011-07-28,390.48 1092 | 2011-08-01,396.75 1093 | 2011-08-02,388.91 1094 | 2011-08-03,392.57 1095 | 2011-08-04,377.37 1096 | 2011-08-05,373.62 1097 | 2011-08-08,353.21 1098 | 2011-08-09,374.01 1099 | 2011-08-09,363.69 1100 | 2011-08-10,373.7 1101 | 2011-08-11,376.99 1102 | 2011-08-14,383.41 1103 | 2011-08-15,380.48 1104 | 2011-08-16,380.44 1105 | 2011-08-17,366.05 1106 | 2011-08-18,356.03 1107 | 2011-08-21,356.44 1108 | 2011-08-22,373.6 1109 | 2011-08-23,376.18 1110 | 2011-08-24,373.72 1111 | 2011-08-25,383.58 1112 | 2011-08-28,389.97 1113 | 2011-08-29,389.99 1114 | 2011-08-30,384.83 1115 | 2011-09-01,381.03 1116 | 2011-09-02,374.05 1117 | 2011-09-06,379.74 1118 | 2011-09-07,383.93 1119 | 2011-09-08,384.14 1120 | 2011-09-09,377.48 1121 | 2011-09-11,379.94 1122 | 2011-09-12,384.62 1123 | 2011-09-13,389.3 1124 | 2011-09-14,392.96 1125 | 2011-09-15,400.5 1126 | 2011-09-18,411.63 1127 | 2011-09-19,413.45 1128 | 2011-09-20,412.14 1129 | 2011-09-21,401.82 1130 | 2011-09-22,404.3 1131 | 2011-09-25,403.17 1132 | 2011-09-26,399.26 1133 | 2011-09-27,397.01 1134 | 2011-09-28,390.57 1135 | 2011-09-29,381.32 1136 | 2011-10-03,374.6 1137 | 2011-10-04,372.5 1138 | 2011-10-05,378.25 1139 | 2011-10-06,377.37 1140 | 2011-10-07,369.8 1141 | 2011-10-09,388.81 1142 | 2011-10-10,400.29 1143 | 2011-10-11,402.19 1144 | 2011-10-12,408.43 1145 | 2011-10-13,422 1146 | 2011-10-16,419.99 1147 | 2011-10-17,422.24 1148 | 2011-10-18,398.62 1149 | 2011-10-19,395.31 1150 | 2011-10-20,392.87 1151 | 2011-10-23,405.77 1152 | 2011-10-24,397.77 1153 | 2011-10-25,400.6 1154 | 2011-10-26,404.69 1155 | 2011-10-27,404.95 1156 | 2011-10-30,404.78 1157 | 2011-11-01,396.51 1158 | 2011-11-02,397.41 1159 | 2011-11-03,403.07 1160 | 2011-11-04,400.24 1161 | 2011-11-07,399.73 1162 | 2011-11-08,406.23 1163 | 2011-11-09,395.28 1164 | 2011-11-09,385.22 1165 | 2011-11-10,384.62 1166 | 2011-11-13,379.26 1167 | 2011-11-14,388.83 1168 | 2011-11-15,384.77 1169 | 2011-11-16,377.41 1170 | 2011-11-17,374.94 1171 | 2011-11-20,369.01 1172 | 2011-11-21,376.51 1173 | 2011-11-22,366.99 1174 | 2011-11-24,363.57 1175 | 2011-11-27,376.12 1176 | 2011-11-28,373.2 1177 | 2011-11-29,382.2 1178 | 2011-12-01,387.93 1179 | 2011-12-02,389.7 1180 | 2011-12-05,393.01 1181 | 2011-12-06,390.95 1182 | 2011-12-07,389.09 1183 | 2011-12-08,390.66 1184 | 2011-12-09,393.62 1185 | 2011-12-11,391.84 1186 | 2011-12-12,388.81 1187 | 2011-12-13,380.19 1188 | 2011-12-14,378.94 1189 | 2011-12-15,381.02 1190 | 2011-12-18,382.21 1191 | 2011-12-19,395.95 1192 | 2011-12-20,396.44 1193 | 2011-12-21,398.55 1194 | 2011-12-22,403.43 1195 | 2011-12-26,406.53 1196 | 2011-12-27,402.64 1197 | 2011-12-28,405.12 1198 | 2011-12-29,405 1199 | 2012-01-03,411.23 1200 | 2012-01-04,413.44 1201 | 2012-01-05,418.03 1202 | 2012-01-06,422.4 1203 | 2012-01-09,421.73 1204 | 2012-01-09,423.24 1205 | 2012-01-10,422.55 1206 | 2012-01-11,421.39 1207 | 2012-01-12,419.81 1208 | 2012-01-16,424.7 1209 | 2012-01-17,429.11 1210 | 2012-01-18,427.75 1211 | 2012-01-19,420.3 1212 | 2012-01-22,427.41 1213 | 2012-01-23,420.41 1214 | 2012-01-24,446.66 1215 | 2012-01-25,444.63 1216 | 2012-01-26,447.28 1217 | 2012-01-29,453.01 1218 | 2012-01-30,456.48 1219 | 2012-02-01,456.19 1220 | 2012-02-02,455.12 1221 | 2012-02-03,459.68 1222 | 2012-02-06,463.97 1223 | 2012-02-07,468.83 1224 | 2012-02-08,476.68 1225 | 2012-02-09,493.17 1226 | 2012-02-09,493.42 1227 | 2012-02-12,502.6 1228 | 2012-02-13,509.46 1229 | 2012-02-14,497.67 1230 | 2012-02-15,502.21 1231 | 2012-02-16,502.12 1232 | 2012-02-20,514.85 1233 | 2012-02-21,513.04 1234 | 2012-02-22,516.39 1235 | 2012-02-23,522.41 1236 | 2012-02-26,525.76 1237 | 2012-02-27,535.41 1238 | 2012-02-28,542.44 1239 | 2012-03-01,544.47 1240 | 2012-03-02,545.18 1241 | 2012-03-05,533.16 1242 | 2012-03-06,530.26 1243 | 2012-03-07,530.69 1244 | 2012-03-08,541.99 1245 | 2012-03-09,545.17 1246 | 2012-03-11,552 1247 | 2012-03-12,568.1 1248 | 2012-03-13,589.58 1249 | 2012-03-14,585.56 1250 | 2012-03-15,585.57 1251 | 2012-03-18,601.1 1252 | 2012-03-19,605.96 1253 | 2012-03-20,602.5 1254 | 2012-03-21,599.34 1255 | 2012-03-22,596.05 1256 | 2012-03-25,606.98 1257 | 2012-03-26,614.48 1258 | 2012-03-27,617.62 1259 | 2012-03-28,609.86 1260 | 2012-03-29,599.55 1261 | 2012-04-02,618.63 1262 | 2012-04-03,629.32 1263 | 2012-04-04,624.31 1264 | 2012-04-05,633.68 1265 | 2012-04-09,636.23 1266 | 2012-04-09,628.44 1267 | 2012-04-10,626.2 1268 | 2012-04-11,622.77 1269 | 2012-04-12,605.23 1270 | 2012-04-15,580.13 1271 | 2012-04-16,609.7 1272 | 2012-04-17,608.34 1273 | 2012-04-18,587.44 1274 | 2012-04-19,572.98 1275 | 2012-04-22,571.7 1276 | 2012-04-23,560.28 1277 | 2012-04-24,610 1278 | 2012-04-25,607.7 1279 | 2012-04-26,603 1280 | 2012-04-29,583.98 1281 | 2012-05-01,582.13 1282 | --------------------------------------------------------------------------------