From 29ce2e096bbe3ddf4de776651ef4fd2bc95b0719 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 20 Jan 2024 08:51:12 -0500 Subject: [PATCH 1/3] Add line dash support --- .../line/line_dashed_butt_undefined.png | Bin 0 -> 17069 bytes .../line/line_dashed_butt_undefined.sg.json | 168 + .../line/line_dashed_round_undefined.png | Bin 0 -> 18387 bytes .../line/line_dashed_round_undefined.sg.json | 168 + .../line/line_dashed_square_undefined.png | Bin 0 -> 19161 bytes .../line/line_dashed_square_undefined.sg.json | 168 + .../vega-scenegraphs/line/simple_dashed.png | Bin 0 -> 17295 bytes .../line/simple_dashed.sg.json | 154 + .../vega-scenegraphs/line/stocks_dashed.png | Bin 0 -> 103057 bytes .../line/stocks_dashed.sg.json | 7084 +++++++++++++++++ .../line/line_dashed_butt_undefined.vg.json | 69 + .../line/line_dashed_round_undefined.vg.json | 69 + .../line/line_dashed_square_undefined.vg.json | 69 + .../vega-specs/line/simple_dashed.vg.json | 95 + .../vega-specs/line/stocks_dashed.vg.json | 86 + sg2d-vega/src/marks/area.rs | 6 +- sg2d-vega/src/marks/line.rs | 6 +- sg2d-vega/src/marks/mod.rs | 1 + sg2d-vega/src/marks/rule.rs | 18 +- sg2d-vega/src/marks/values.rs | 30 + sg2d-wgpu/src/marks/path.rs | 125 +- sg2d-wgpu/tests/test_image_baselines.rs | 7 + 22 files changed, 8272 insertions(+), 51 deletions(-) create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_round_undefined.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_round_undefined.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_square_undefined.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_square_undefined.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/simple_dashed.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/simple_dashed.sg.json create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/stocks_dashed.png create mode 100644 sg2d-vega-test-data/vega-scenegraphs/line/stocks_dashed.sg.json create mode 100644 sg2d-vega-test-data/vega-specs/line/line_dashed_butt_undefined.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/line/line_dashed_round_undefined.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/line/line_dashed_square_undefined.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/line/simple_dashed.vg.json create mode 100644 sg2d-vega-test-data/vega-specs/line/stocks_dashed.vg.json create mode 100644 sg2d-vega/src/marks/values.rs diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.png b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.png new file mode 100644 index 0000000000000000000000000000000000000000..d8780c2705dea44f243ebddc4a8ca62795264cb5 GIT binary patch literal 17069 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.sg.json b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.sg.json new file mode 100644 index 0000000..721414a --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_butt_undefined.sg.json @@ -0,0 +1,168 @@ +{ + "width": 310, + "height": 210, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 30, + "y": 120, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 60, + "y": 42.85714285714286, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 90, + "y": 80, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 117, + "y": 88.57142857142857, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 120, + "y": 102.85714285714285, + "defined": false + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 150, + "y": 97.14285714285715, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 180, + "y": 62.857142857142854, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 183, + "y": 114.28571428571428, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 240, + "y": 125.71428571428571, + "defined": true + }, + { + "strokeCap": "butt", + "strokeJoin": "miter", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 270, + "y": 68.57142857142857, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "stroke": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200 + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_round_undefined.png b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_round_undefined.png new file mode 100644 index 0000000000000000000000000000000000000000..2f59f385e6ec584b1f122900b03723570dedae98 GIT binary patch literal 18387 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 Qid(o~@%;V2crO2c17%sLvH$=8 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_square_undefined.sg.json b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_square_undefined.sg.json new file mode 100644 index 0000000..3ac4642 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/line/line_dashed_square_undefined.sg.json @@ -0,0 +1,168 @@ +{ + "width": 310, + "height": 210, + "origin": [ + 5, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 30, + "y": 120, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 60, + "y": 42.85714285714286, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 90, + "y": 80, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 117, + "y": 88.57142857142857, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 120, + "y": 102.85714285714285, + "defined": false + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 150, + "y": 97.14285714285715, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 180, + "y": 62.857142857142854, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 183, + "y": 114.28571428571428, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 240, + "y": 125.71428571428571, + "defined": true + }, + { + "strokeCap": "square", + "strokeJoin": "bevel", + "strokeWidth": 4, + "strokeDash": [ + 14, + 8 + ], + "stroke": "#4c78a8", + "x": 270, + "y": 68.57142857142857, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "fill": "transparent", + "stroke": "transparent", + "x": 0, + "y": 0, + "width": 300, + "height": 200 + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/simple_dashed.png b/sg2d-vega-test-data/vega-scenegraphs/line/simple_dashed.png new file mode 100644 index 0000000000000000000000000000000000000000..fcbff7edbd4681593a7070484b28709e17ffa3ca GIT binary patch literal 17295 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 literal 0 HcmV?d00001 diff --git a/sg2d-vega-test-data/vega-scenegraphs/line/stocks_dashed.sg.json b/sg2d-vega-test-data/vega-scenegraphs/line/stocks_dashed.sg.json new file mode 100644 index 0000000..98bf645 --- /dev/null +++ b/sg2d-vega-test-data/vega-scenegraphs/line/stocks_dashed.sg.json @@ -0,0 +1,7084 @@ +{ + "width": 414, + "height": 410, + "origin": [ + 7, + 5 + ], + "scenegraph": { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2000; price: 39.81; symbol: MSFT", + "x": 0, + "y": 380.09499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2000; price: 36.35; symbol: MSFT", + "x": 3.34051724137931, + "y": 381.825, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2000; price: 43.22; symbol: MSFT", + "x": 6.4655172413793105, + "y": 378.39, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2000; price: 28.37; symbol: MSFT", + "x": 9.806034482758621, + "y": 385.815, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2000; price: 25.45; symbol: MSFT", + "x": 13.034303160919542, + "y": 387.275, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2000; price: 32.54; symbol: MSFT", + "x": 16.37482040229885, + "y": 383.73, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2000; price: 28.4; symbol: MSFT", + "x": 19.607579022988507, + "y": 385.8, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2000; price: 28.4; symbol: MSFT", + "x": 22.948096264367816, + "y": 385.8, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2000; price: 24.53; symbol: MSFT", + "x": 26.288613505747126, + "y": 387.735, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2000; price: 28.02; symbol: MSFT", + "x": 29.52137212643678, + "y": 385.99, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2000; price: 23.34; symbol: MSFT", + "x": 32.866379310344826, + "y": 388.33000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2000; price: 17.65; symbol: MSFT", + "x": 36.099137931034484, + "y": 391.175, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2001; price: 24.84; symbol: MSFT", + "x": 39.439655172413794, + "y": 387.58, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2001; price: 24; symbol: MSFT", + "x": 42.7801724137931, + "y": 388, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2001; price: 22.25; symbol: MSFT", + "x": 45.797413793103445, + "y": 388.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2001; price: 27.56; symbol: MSFT", + "x": 49.137931034482754, + "y": 386.22, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2001; price: 28.14; symbol: MSFT", + "x": 52.36619971264368, + "y": 385.93, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2001; price: 29.7; symbol: MSFT", + "x": 55.70671695402298, + "y": 385.15000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2001; price: 26.93; symbol: MSFT", + "x": 58.93947557471264, + "y": 386.53499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2001; price: 23.21; symbol: MSFT", + "x": 62.279992816091955, + "y": 388.395, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2001; price: 20.82; symbol: MSFT", + "x": 65.62051005747126, + "y": 389.59000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2001; price: 23.65; symbol: MSFT", + "x": 68.85326867816092, + "y": 388.17499999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2001; price: 26.12; symbol: MSFT", + "x": 72.19827586206897, + "y": 386.94, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2001; price: 26.95; symbol: MSFT", + "x": 75.43103448275862, + "y": 386.52500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2002; price: 25.92; symbol: MSFT", + "x": 78.77155172413794, + "y": 387.04, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2002; price: 23.73; symbol: MSFT", + "x": 82.11206896551724, + "y": 388.135, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2002; price: 24.53; symbol: MSFT", + "x": 85.12931034482759, + "y": 387.735, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2002; price: 21.26; symbol: MSFT", + "x": 88.46982758620689, + "y": 389.37, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2002; price: 20.71; symbol: MSFT", + "x": 91.6980962643678, + "y": 389.64500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2002; price: 22.25; symbol: MSFT", + "x": 95.03861350574712, + "y": 388.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2002; price: 19.52; symbol: MSFT", + "x": 98.27137212643679, + "y": 390.24, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2002; price: 19.97; symbol: MSFT", + "x": 101.61188936781609, + "y": 390.015, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2002; price: 17.79; symbol: MSFT", + "x": 104.9524066091954, + "y": 391.105, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2002; price: 21.75; symbol: MSFT", + "x": 108.18516522988506, + "y": 389.125, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2002; price: 23.46; symbol: MSFT", + "x": 111.53017241379311, + "y": 388.27, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2002; price: 21.03; symbol: MSFT", + "x": 114.76293103448276, + "y": 389.485, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2003; price: 19.31; symbol: MSFT", + "x": 118.10344827586208, + "y": 390.34499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2003; price: 19.34; symbol: MSFT", + "x": 121.44396551724137, + "y": 390.33000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2003; price: 19.76; symbol: MSFT", + "x": 124.46120689655173, + "y": 390.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2003; price: 20.87; symbol: MSFT", + "x": 127.80172413793103, + "y": 389.565, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2003; price: 20.09; symbol: MSFT", + "x": 131.02999281609195, + "y": 389.955, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2003; price: 20.93; symbol: MSFT", + "x": 134.37051005747128, + "y": 389.535, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2003; price: 21.56; symbol: MSFT", + "x": 137.60326867816093, + "y": 389.21999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2003; price: 21.65; symbol: MSFT", + "x": 140.94378591954023, + "y": 389.175, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2003; price: 22.69; symbol: MSFT", + "x": 144.28430316091954, + "y": 388.65500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2003; price: 21.45; symbol: MSFT", + "x": 147.5170617816092, + "y": 389.275, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2003; price: 21.1; symbol: MSFT", + "x": 150.86206896551724, + "y": 389.45, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2003; price: 22.46; symbol: MSFT", + "x": 154.0948275862069, + "y": 388.77000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2004; price: 22.69; symbol: MSFT", + "x": 157.43534482758622, + "y": 388.65500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2004; price: 21.77; symbol: MSFT", + "x": 160.77586206896552, + "y": 389.115, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2004; price: 20.46; symbol: MSFT", + "x": 163.90086206896552, + "y": 389.77, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2004; price: 21.45; symbol: MSFT", + "x": 167.24137931034483, + "y": 389.275, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2004; price: 21.53; symbol: MSFT", + "x": 170.46964798850576, + "y": 389.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2004; price: 23.44; symbol: MSFT", + "x": 173.81016522988506, + "y": 388.28000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2004; price: 23.38; symbol: MSFT", + "x": 177.0429238505747, + "y": 388.31, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2004; price: 22.47; symbol: MSFT", + "x": 180.38344109195404, + "y": 388.765, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2004; price: 22.76; symbol: MSFT", + "x": 183.72395833333331, + "y": 388.62, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2004; price: 23.02; symbol: MSFT", + "x": 186.956716954023, + "y": 388.49, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2004; price: 24.6; symbol: MSFT", + "x": 190.30172413793102, + "y": 387.7, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2004; price: 24.52; symbol: MSFT", + "x": 193.5344827586207, + "y": 387.74, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2005; price: 24.11; symbol: MSFT", + "x": 196.875, + "y": 387.945, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2005; price: 23.15; symbol: MSFT", + "x": 200.2155172413793, + "y": 388.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2005; price: 22.24; symbol: MSFT", + "x": 203.23275862068962, + "y": 388.88, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2005; price: 23.28; symbol: MSFT", + "x": 206.57327586206895, + "y": 388.36, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2005; price: 23.82; symbol: MSFT", + "x": 209.80154454022988, + "y": 388.09, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2005; price: 22.93; symbol: MSFT", + "x": 213.1420617816092, + "y": 388.53499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2005; price: 23.64; symbol: MSFT", + "x": 216.37482040229884, + "y": 388.18, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2005; price: 25.35; symbol: MSFT", + "x": 219.71533764367814, + "y": 387.325, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2005; price: 23.83; symbol: MSFT", + "x": 223.05585488505747, + "y": 388.08500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2005; price: 23.8; symbol: MSFT", + "x": 226.28861350574715, + "y": 388.09999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2005; price: 25.71; symbol: MSFT", + "x": 229.63362068965517, + "y": 387.145, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2005; price: 24.29; symbol: MSFT", + "x": 232.86637931034483, + "y": 387.855, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2006; price: 26.14; symbol: MSFT", + "x": 236.20689655172416, + "y": 386.93, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2006; price: 25.04; symbol: MSFT", + "x": 239.54741379310346, + "y": 387.48, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2006; price: 25.36; symbol: MSFT", + "x": 242.56465517241378, + "y": 387.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2006; price: 22.5; symbol: MSFT", + "x": 245.9051724137931, + "y": 388.75, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2006; price: 21.19; symbol: MSFT", + "x": 249.13344109195404, + "y": 389.405, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2006; price: 21.8; symbol: MSFT", + "x": 252.47395833333334, + "y": 389.1, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2006; price: 22.51; symbol: MSFT", + "x": 255.706716954023, + "y": 388.745, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2006; price: 24.13; symbol: MSFT", + "x": 259.0472341954023, + "y": 387.935, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2006; price: 25.68; symbol: MSFT", + "x": 262.3877514367816, + "y": 387.15999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2006; price: 26.96; symbol: MSFT", + "x": 265.6205100574712, + "y": 386.52000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2006; price: 27.66; symbol: MSFT", + "x": 268.9655172413793, + "y": 386.17, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2006; price: 28.13; symbol: MSFT", + "x": 272.19827586206895, + "y": 385.935, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2007; price: 29.07; symbol: MSFT", + "x": 275.53879310344826, + "y": 385.465, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2007; price: 26.63; symbol: MSFT", + "x": 278.87931034482756, + "y": 386.685, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2007; price: 26.35; symbol: MSFT", + "x": 281.89655172413796, + "y": 386.82500000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2007; price: 28.3; symbol: MSFT", + "x": 285.2325790229885, + "y": 385.84999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2007; price: 29.11; symbol: MSFT", + "x": 288.46533764367814, + "y": 385.445, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2007; price: 27.95; symbol: MSFT", + "x": 291.80585488505744, + "y": 386.02500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2007; price: 27.5; symbol: MSFT", + "x": 295.03861350574715, + "y": 386.25, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2007; price: 27.34; symbol: MSFT", + "x": 298.37913074712645, + "y": 386.33000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2007; price: 28.04; symbol: MSFT", + "x": 301.71964798850576, + "y": 385.98, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2007; price: 35.03; symbol: MSFT", + "x": 304.9524066091954, + "y": 382.485, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2007; price: 32.09; symbol: MSFT", + "x": 308.2929238505747, + "y": 383.955, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2007; price: 34; symbol: MSFT", + "x": 311.5301724137931, + "y": 383, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2008; price: 31.13; symbol: MSFT", + "x": 314.87068965517244, + "y": 384.435, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2008; price: 26.07; symbol: MSFT", + "x": 318.21120689655174, + "y": 386.96500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2008; price: 27.21; symbol: MSFT", + "x": 321.33620689655174, + "y": 386.395, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2008; price: 27.34; symbol: MSFT", + "x": 324.6722341954023, + "y": 386.33000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2008; price: 27.25; symbol: MSFT", + "x": 327.9049928160919, + "y": 386.375, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2008; price: 26.47; symbol: MSFT", + "x": 331.2455100574712, + "y": 386.765, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2008; price: 24.75; symbol: MSFT", + "x": 334.47826867816093, + "y": 387.625, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2008; price: 26.36; symbol: MSFT", + "x": 337.81878591954023, + "y": 386.82, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2008; price: 25.78; symbol: MSFT", + "x": 341.15930316091954, + "y": 387.11, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2008; price: 21.57; symbol: MSFT", + "x": 344.3920617816092, + "y": 389.215, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2008; price: 19.66; symbol: MSFT", + "x": 347.7325790229885, + "y": 390.17, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2008; price: 18.91; symbol: MSFT", + "x": 350.9698275862069, + "y": 390.545, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2009; price: 16.63; symbol: MSFT", + "x": 354.3103448275862, + "y": 391.685, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2009; price: 15.81; symbol: MSFT", + "x": 357.6508620689655, + "y": 392.09499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2009; price: 17.99; symbol: MSFT", + "x": 360.6681034482759, + "y": 391.005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Apr 01, 2009; price: 19.84; symbol: MSFT", + "x": 364.00413074712645, + "y": 390.08, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: May 01, 2009; price: 20.59; symbol: MSFT", + "x": 367.2368893678161, + "y": 389.70500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jun 01, 2009; price: 23.42; symbol: MSFT", + "x": 370.5774066091954, + "y": 388.28999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jul 01, 2009; price: 23.18; symbol: MSFT", + "x": 373.81016522988506, + "y": 388.41, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Aug 01, 2009; price: 24.43; symbol: MSFT", + "x": 377.15068247126436, + "y": 387.785, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Sep 01, 2009; price: 25.49; symbol: MSFT", + "x": 380.49119971264366, + "y": 387.255, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Oct 01, 2009; price: 27.48; symbol: MSFT", + "x": 383.72395833333337, + "y": 386.26, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Nov 01, 2009; price: 29.27; symbol: MSFT", + "x": 387.0644755747127, + "y": 385.365, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Dec 01, 2009; price: 30.34; symbol: MSFT", + "x": 390.30172413793105, + "y": 384.83, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Jan 01, 2010; price: 28.05; symbol: MSFT", + "x": 393.64224137931035, + "y": 385.975, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Feb 01, 2010; price: 28.67; symbol: MSFT", + "x": 396.98275862068965, + "y": 385.665, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 4, + 8, + 4 + ], + "description": "date: Mar 01, 2010; price: 28.8; symbol: MSFT", + "x": 400, + "y": 385.59999999999997, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "width": 400, + "height": 400 + }, + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2000; price: 64.56; symbol: AMZN", + "x": 0, + "y": 367.72, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2000; price: 68.87; symbol: AMZN", + "x": 3.34051724137931, + "y": 365.565, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2000; price: 67; symbol: AMZN", + "x": 6.4655172413793105, + "y": 366.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2000; price: 55.19; symbol: AMZN", + "x": 9.806034482758621, + "y": 372.40500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2000; price: 48.31; symbol: AMZN", + "x": 13.034303160919542, + "y": 375.84499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2000; price: 36.31; symbol: AMZN", + "x": 16.37482040229885, + "y": 381.84499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2000; price: 30.12; symbol: AMZN", + "x": 19.607579022988507, + "y": 384.94, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2000; price: 41.5; symbol: AMZN", + "x": 22.948096264367816, + "y": 379.25, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2000; price: 38.44; symbol: AMZN", + "x": 26.288613505747126, + "y": 380.78, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2000; price: 36.62; symbol: AMZN", + "x": 29.52137212643678, + "y": 381.69, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2000; price: 24.69; symbol: AMZN", + "x": 32.866379310344826, + "y": 387.655, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2000; price: 15.56; symbol: AMZN", + "x": 36.099137931034484, + "y": 392.22, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2001; price: 17.31; symbol: AMZN", + "x": 39.439655172413794, + "y": 391.345, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2001; price: 10.19; symbol: AMZN", + "x": 42.7801724137931, + "y": 394.90500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2001; price: 10.23; symbol: AMZN", + "x": 45.797413793103445, + "y": 394.885, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2001; price: 15.78; symbol: AMZN", + "x": 49.137931034482754, + "y": 392.11, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2001; price: 16.69; symbol: AMZN", + "x": 52.36619971264368, + "y": 391.655, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2001; price: 14.15; symbol: AMZN", + "x": 55.70671695402298, + "y": 392.925, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2001; price: 12.49; symbol: AMZN", + "x": 58.93947557471264, + "y": 393.755, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2001; price: 8.94; symbol: AMZN", + "x": 62.279992816091955, + "y": 395.53, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2001; price: 5.97; symbol: AMZN", + "x": 65.62051005747126, + "y": 397.015, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2001; price: 6.98; symbol: AMZN", + "x": 68.85326867816092, + "y": 396.51, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2001; price: 11.32; symbol: AMZN", + "x": 72.19827586206897, + "y": 394.34, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2001; price: 10.82; symbol: AMZN", + "x": 75.43103448275862, + "y": 394.59, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2002; price: 14.19; symbol: AMZN", + "x": 78.77155172413794, + "y": 392.90500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2002; price: 14.1; symbol: AMZN", + "x": 82.11206896551724, + "y": 392.95, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2002; price: 14.3; symbol: AMZN", + "x": 85.12931034482759, + "y": 392.85, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2002; price: 16.69; symbol: AMZN", + "x": 88.46982758620689, + "y": 391.655, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2002; price: 18.23; symbol: AMZN", + "x": 91.6980962643678, + "y": 390.885, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2002; price: 16.25; symbol: AMZN", + "x": 95.03861350574712, + "y": 391.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2002; price: 14.45; symbol: AMZN", + "x": 98.27137212643679, + "y": 392.77500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2002; price: 14.94; symbol: AMZN", + "x": 101.61188936781609, + "y": 392.53, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2002; price: 15.93; symbol: AMZN", + "x": 104.9524066091954, + "y": 392.035, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2002; price: 19.36; symbol: AMZN", + "x": 108.18516522988506, + "y": 390.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2002; price: 23.35; symbol: AMZN", + "x": 111.53017241379311, + "y": 388.325, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2002; price: 18.89; symbol: AMZN", + "x": 114.76293103448276, + "y": 390.555, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2003; price: 21.85; symbol: AMZN", + "x": 118.10344827586208, + "y": 389.075, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2003; price: 22.01; symbol: AMZN", + "x": 121.44396551724137, + "y": 388.995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2003; price: 26.03; symbol: AMZN", + "x": 124.46120689655173, + "y": 386.985, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2003; price: 28.69; symbol: AMZN", + "x": 127.80172413793103, + "y": 385.655, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2003; price: 35.89; symbol: AMZN", + "x": 131.02999281609195, + "y": 382.055, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2003; price: 36.32; symbol: AMZN", + "x": 134.37051005747128, + "y": 381.84, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2003; price: 41.64; symbol: AMZN", + "x": 137.60326867816093, + "y": 379.18, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2003; price: 46.32; symbol: AMZN", + "x": 140.94378591954023, + "y": 376.84000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2003; price: 48.43; symbol: AMZN", + "x": 144.28430316091954, + "y": 375.78499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2003; price: 54.43; symbol: AMZN", + "x": 147.5170617816092, + "y": 372.785, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2003; price: 53.97; symbol: AMZN", + "x": 150.86206896551724, + "y": 373.015, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2003; price: 52.62; symbol: AMZN", + "x": 154.0948275862069, + "y": 373.69, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2004; price: 50.4; symbol: AMZN", + "x": 157.43534482758622, + "y": 374.8, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2004; price: 43.01; symbol: AMZN", + "x": 160.77586206896552, + "y": 378.495, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2004; price: 43.28; symbol: AMZN", + "x": 163.90086206896552, + "y": 378.36, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2004; price: 43.6; symbol: AMZN", + "x": 167.24137931034483, + "y": 378.2, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2004; price: 48.5; symbol: AMZN", + "x": 170.46964798850576, + "y": 375.75, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2004; price: 54.4; symbol: AMZN", + "x": 173.81016522988506, + "y": 372.79999999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2004; price: 38.92; symbol: AMZN", + "x": 177.0429238505747, + "y": 380.54, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2004; price: 38.14; symbol: AMZN", + "x": 180.38344109195404, + "y": 380.93, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2004; price: 40.86; symbol: AMZN", + "x": 183.72395833333331, + "y": 379.57, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2004; price: 34.13; symbol: AMZN", + "x": 186.956716954023, + "y": 382.935, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2004; price: 39.68; symbol: AMZN", + "x": 190.30172413793102, + "y": 380.16, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2004; price: 44.29; symbol: AMZN", + "x": 193.5344827586207, + "y": 377.855, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2005; price: 43.22; symbol: AMZN", + "x": 196.875, + "y": 378.39, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2005; price: 35.18; symbol: AMZN", + "x": 200.2155172413793, + "y": 382.41, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2005; price: 34.27; symbol: AMZN", + "x": 203.23275862068962, + "y": 382.865, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2005; price: 32.36; symbol: AMZN", + "x": 206.57327586206895, + "y": 383.82, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2005; price: 35.51; symbol: AMZN", + "x": 209.80154454022988, + "y": 382.245, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2005; price: 33.09; symbol: AMZN", + "x": 213.1420617816092, + "y": 383.45500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2005; price: 45.15; symbol: AMZN", + "x": 216.37482040229884, + "y": 377.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2005; price: 42.7; symbol: AMZN", + "x": 219.71533764367814, + "y": 378.65000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2005; price: 45.3; symbol: AMZN", + "x": 223.05585488505747, + "y": 377.34999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2005; price: 39.86; symbol: AMZN", + "x": 226.28861350574715, + "y": 380.07, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2005; price: 48.46; symbol: AMZN", + "x": 229.63362068965517, + "y": 375.77, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2005; price: 47.15; symbol: AMZN", + "x": 232.86637931034483, + "y": 376.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2006; price: 44.82; symbol: AMZN", + "x": 236.20689655172416, + "y": 377.59000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2006; price: 37.44; symbol: AMZN", + "x": 239.54741379310346, + "y": 381.28000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2006; price: 36.53; symbol: AMZN", + "x": 242.56465517241378, + "y": 381.73499999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2006; price: 35.21; symbol: AMZN", + "x": 245.9051724137931, + "y": 382.395, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2006; price: 34.61; symbol: AMZN", + "x": 249.13344109195404, + "y": 382.695, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2006; price: 38.68; symbol: AMZN", + "x": 252.47395833333334, + "y": 380.66, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2006; price: 26.89; symbol: AMZN", + "x": 255.706716954023, + "y": 386.555, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2006; price: 30.83; symbol: AMZN", + "x": 259.0472341954023, + "y": 384.585, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2006; price: 32.12; symbol: AMZN", + "x": 262.3877514367816, + "y": 383.94, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2006; price: 38.09; symbol: AMZN", + "x": 265.6205100574712, + "y": 380.955, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2006; price: 40.34; symbol: AMZN", + "x": 268.9655172413793, + "y": 379.83, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2006; price: 39.46; symbol: AMZN", + "x": 272.19827586206895, + "y": 380.27000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2007; price: 37.67; symbol: AMZN", + "x": 275.53879310344826, + "y": 381.165, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2007; price: 39.14; symbol: AMZN", + "x": 278.87931034482756, + "y": 380.43, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2007; price: 39.79; symbol: AMZN", + "x": 281.89655172413796, + "y": 380.105, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2007; price: 61.33; symbol: AMZN", + "x": 285.2325790229885, + "y": 369.33500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2007; price: 69.14; symbol: AMZN", + "x": 288.46533764367814, + "y": 365.43, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2007; price: 68.41; symbol: AMZN", + "x": 291.80585488505744, + "y": 365.795, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2007; price: 78.54; symbol: AMZN", + "x": 295.03861350574715, + "y": 360.73, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2007; price: 79.91; symbol: AMZN", + "x": 298.37913074712645, + "y": 360.045, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2007; price: 93.15; symbol: AMZN", + "x": 301.71964798850576, + "y": 353.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2007; price: 89.15; symbol: AMZN", + "x": 304.9524066091954, + "y": 355.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2007; price: 90.56; symbol: AMZN", + "x": 308.2929238505747, + "y": 354.72, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2007; price: 92.64; symbol: AMZN", + "x": 311.5301724137931, + "y": 353.68, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2008; price: 77.7; symbol: AMZN", + "x": 314.87068965517244, + "y": 361.15, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2008; price: 64.47; symbol: AMZN", + "x": 318.21120689655174, + "y": 367.765, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2008; price: 71.3; symbol: AMZN", + "x": 321.33620689655174, + "y": 364.35, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2008; price: 78.63; symbol: AMZN", + "x": 324.6722341954023, + "y": 360.685, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2008; price: 81.62; symbol: AMZN", + "x": 327.9049928160919, + "y": 359.19, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2008; price: 73.33; symbol: AMZN", + "x": 331.2455100574712, + "y": 363.33500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2008; price: 76.34; symbol: AMZN", + "x": 334.47826867816093, + "y": 361.83, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2008; price: 80.81; symbol: AMZN", + "x": 337.81878591954023, + "y": 359.595, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2008; price: 72.76; symbol: AMZN", + "x": 341.15930316091954, + "y": 363.62, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2008; price: 57.24; symbol: AMZN", + "x": 344.3920617816092, + "y": 371.38, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2008; price: 42.7; symbol: AMZN", + "x": 347.7325790229885, + "y": 378.65000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2008; price: 51.28; symbol: AMZN", + "x": 350.9698275862069, + "y": 374.35999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2009; price: 58.82; symbol: AMZN", + "x": 354.3103448275862, + "y": 370.59, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2009; price: 64.79; symbol: AMZN", + "x": 357.6508620689655, + "y": 367.605, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2009; price: 73.44; symbol: AMZN", + "x": 360.6681034482759, + "y": 363.28000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Apr 01, 2009; price: 80.52; symbol: AMZN", + "x": 364.00413074712645, + "y": 359.74, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: May 01, 2009; price: 77.99; symbol: AMZN", + "x": 367.2368893678161, + "y": 361.005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jun 01, 2009; price: 83.66; symbol: AMZN", + "x": 370.5774066091954, + "y": 358.17, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jul 01, 2009; price: 85.76; symbol: AMZN", + "x": 373.81016522988506, + "y": 357.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Aug 01, 2009; price: 81.19; symbol: AMZN", + "x": 377.15068247126436, + "y": 359.40500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Sep 01, 2009; price: 93.36; symbol: AMZN", + "x": 380.49119971264366, + "y": 353.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Oct 01, 2009; price: 118.81; symbol: AMZN", + "x": 383.72395833333337, + "y": 340.59499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Nov 01, 2009; price: 135.91; symbol: AMZN", + "x": 387.0644755747127, + "y": 332.045, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Dec 01, 2009; price: 134.52; symbol: AMZN", + "x": 390.30172413793105, + "y": 332.74, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Jan 01, 2010; price: 125.41; symbol: AMZN", + "x": 393.64224137931035, + "y": 337.295, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Feb 01, 2010; price: 118.4; symbol: AMZN", + "x": 396.98275862068965, + "y": 340.8, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 8, + 4 + ], + "description": "date: Mar 01, 2010; price: 128.82; symbol: AMZN", + "x": 400, + "y": 335.59000000000003, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "width": 400, + "height": 400 + }, + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2000; price: 100.52; symbol: IBM", + "x": 0, + "y": 349.74, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2000; price: 92.11; symbol: IBM", + "x": 3.34051724137931, + "y": 353.945, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2000; price: 106.11; symbol: IBM", + "x": 6.4655172413793105, + "y": 346.945, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2000; price: 99.95; symbol: IBM", + "x": 9.806034482758621, + "y": 350.025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2000; price: 96.31; symbol: IBM", + "x": 13.034303160919542, + "y": 351.845, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2000; price: 98.33; symbol: IBM", + "x": 16.37482040229885, + "y": 350.83500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2000; price: 100.74; symbol: IBM", + "x": 19.607579022988507, + "y": 349.63, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2000; price: 118.62; symbol: IBM", + "x": 22.948096264367816, + "y": 340.69, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2000; price: 101.19; symbol: IBM", + "x": 26.288613505747126, + "y": 349.40500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2000; price: 88.5; symbol: IBM", + "x": 29.52137212643678, + "y": 355.75, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2000; price: 84.12; symbol: IBM", + "x": 32.866379310344826, + "y": 357.94, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2000; price: 76.47; symbol: IBM", + "x": 36.099137931034484, + "y": 361.76500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2001; price: 100.76; symbol: IBM", + "x": 39.439655172413794, + "y": 349.62, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2001; price: 89.98; symbol: IBM", + "x": 42.7801724137931, + "y": 355.01, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2001; price: 86.63; symbol: IBM", + "x": 45.797413793103445, + "y": 356.685, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2001; price: 103.7; symbol: IBM", + "x": 49.137931034482754, + "y": 348.15, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2001; price: 100.82; symbol: IBM", + "x": 52.36619971264368, + "y": 349.59, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2001; price: 102.35; symbol: IBM", + "x": 55.70671695402298, + "y": 348.825, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2001; price: 94.87; symbol: IBM", + "x": 58.93947557471264, + "y": 352.565, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2001; price: 90.25; symbol: IBM", + "x": 62.279992816091955, + "y": 354.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2001; price: 82.82; symbol: IBM", + "x": 65.62051005747126, + "y": 358.59000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2001; price: 97.58; symbol: IBM", + "x": 68.85326867816092, + "y": 351.21000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2001; price: 104.5; symbol: IBM", + "x": 72.19827586206897, + "y": 347.75, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2001; price: 109.36; symbol: IBM", + "x": 75.43103448275862, + "y": 345.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2002; price: 97.54; symbol: IBM", + "x": 78.77155172413794, + "y": 351.22999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2002; price: 88.82; symbol: IBM", + "x": 82.11206896551724, + "y": 355.59000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2002; price: 94.15; symbol: IBM", + "x": 85.12931034482759, + "y": 352.925, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2002; price: 75.82; symbol: IBM", + "x": 88.46982758620689, + "y": 362.09, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2002; price: 72.97; symbol: IBM", + "x": 91.6980962643678, + "y": 363.515, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2002; price: 65.31; symbol: IBM", + "x": 95.03861350574712, + "y": 367.34499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2002; price: 63.86; symbol: IBM", + "x": 98.27137212643679, + "y": 368.07, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2002; price: 68.52; symbol: IBM", + "x": 101.61188936781609, + "y": 365.74, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2002; price: 53.01; symbol: IBM", + "x": 104.9524066091954, + "y": 373.495, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2002; price: 71.76; symbol: IBM", + "x": 108.18516522988506, + "y": 364.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2002; price: 79.16; symbol: IBM", + "x": 111.53017241379311, + "y": 360.42, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2002; price: 70.58; symbol: IBM", + "x": 114.76293103448276, + "y": 364.71, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2003; price: 71.22; symbol: IBM", + "x": 118.10344827586208, + "y": 364.39, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2003; price: 71.13; symbol: IBM", + "x": 121.44396551724137, + "y": 364.435, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2003; price: 71.57; symbol: IBM", + "x": 124.46120689655173, + "y": 364.215, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2003; price: 77.47; symbol: IBM", + "x": 127.80172413793103, + "y": 361.265, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2003; price: 80.48; symbol: IBM", + "x": 131.02999281609195, + "y": 359.76, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2003; price: 75.42; symbol: IBM", + "x": 134.37051005747128, + "y": 362.29, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2003; price: 74.28; symbol: IBM", + "x": 137.60326867816093, + "y": 362.86, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2003; price: 75.12; symbol: IBM", + "x": 140.94378591954023, + "y": 362.44, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2003; price: 80.91; symbol: IBM", + "x": 144.28430316091954, + "y": 359.545, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2003; price: 81.96; symbol: IBM", + "x": 147.5170617816092, + "y": 359.02000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2003; price: 83.08; symbol: IBM", + "x": 150.86206896551724, + "y": 358.46, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2003; price: 85.05; symbol: IBM", + "x": 154.0948275862069, + "y": 357.47499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2004; price: 91.06; symbol: IBM", + "x": 157.43534482758622, + "y": 354.46999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2004; price: 88.7; symbol: IBM", + "x": 160.77586206896552, + "y": 355.65, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2004; price: 84.41; symbol: IBM", + "x": 163.90086206896552, + "y": 357.795, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2004; price: 81.04; symbol: IBM", + "x": 167.24137931034483, + "y": 359.48, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2004; price: 81.59; symbol: IBM", + "x": 170.46964798850576, + "y": 359.205, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2004; price: 81.19; symbol: IBM", + "x": 173.81016522988506, + "y": 359.40500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2004; price: 80.19; symbol: IBM", + "x": 177.0429238505747, + "y": 359.90500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2004; price: 78.17; symbol: IBM", + "x": 180.38344109195404, + "y": 360.915, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2004; price: 79.13; symbol: IBM", + "x": 183.72395833333331, + "y": 360.435, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2004; price: 82.84; symbol: IBM", + "x": 186.956716954023, + "y": 358.58, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2004; price: 87.15; symbol: IBM", + "x": 190.30172413793102, + "y": 356.425, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2004; price: 91.16; symbol: IBM", + "x": 193.5344827586207, + "y": 354.42, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2005; price: 86.39; symbol: IBM", + "x": 196.875, + "y": 356.805, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2005; price: 85.78; symbol: IBM", + "x": 200.2155172413793, + "y": 357.11, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2005; price: 84.66; symbol: IBM", + "x": 203.23275862068962, + "y": 357.66999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2005; price: 70.77; symbol: IBM", + "x": 206.57327586206895, + "y": 364.615, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2005; price: 70.18; symbol: IBM", + "x": 209.80154454022988, + "y": 364.90999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2005; price: 68.93; symbol: IBM", + "x": 213.1420617816092, + "y": 365.53499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2005; price: 77.53; symbol: IBM", + "x": 216.37482040229884, + "y": 361.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2005; price: 75.07; symbol: IBM", + "x": 219.71533764367814, + "y": 362.465, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2005; price: 74.7; symbol: IBM", + "x": 223.05585488505747, + "y": 362.65, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2005; price: 76.25; symbol: IBM", + "x": 226.28861350574715, + "y": 361.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2005; price: 82.98; symbol: IBM", + "x": 229.63362068965517, + "y": 358.51, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2005; price: 76.73; symbol: IBM", + "x": 232.86637931034483, + "y": 361.635, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2006; price: 75.89; symbol: IBM", + "x": 236.20689655172416, + "y": 362.055, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2006; price: 75.09; symbol: IBM", + "x": 239.54741379310346, + "y": 362.45500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2006; price: 77.17; symbol: IBM", + "x": 242.56465517241378, + "y": 361.415, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2006; price: 77.05; symbol: IBM", + "x": 245.9051724137931, + "y": 361.47499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2006; price: 75.04; symbol: IBM", + "x": 249.13344109195404, + "y": 362.48, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2006; price: 72.15; symbol: IBM", + "x": 252.47395833333334, + "y": 363.925, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2006; price: 72.7; symbol: IBM", + "x": 255.706716954023, + "y": 363.65, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2006; price: 76.35; symbol: IBM", + "x": 259.0472341954023, + "y": 361.82500000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2006; price: 77.26; symbol: IBM", + "x": 262.3877514367816, + "y": 361.37, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2006; price: 87.06; symbol: IBM", + "x": 265.6205100574712, + "y": 356.47, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2006; price: 86.95; symbol: IBM", + "x": 268.9655172413793, + "y": 356.525, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2006; price: 91.9; symbol: IBM", + "x": 272.19827586206895, + "y": 354.04999999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2007; price: 93.79; symbol: IBM", + "x": 275.53879310344826, + "y": 353.105, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2007; price: 88.18; symbol: IBM", + "x": 278.87931034482756, + "y": 355.90999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2007; price: 89.44; symbol: IBM", + "x": 281.89655172413796, + "y": 355.28, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2007; price: 96.98; symbol: IBM", + "x": 285.2325790229885, + "y": 351.51, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2007; price: 101.54; symbol: IBM", + "x": 288.46533764367814, + "y": 349.23, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2007; price: 100.25; symbol: IBM", + "x": 291.80585488505744, + "y": 349.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2007; price: 105.4; symbol: IBM", + "x": 295.03861350574715, + "y": 347.3, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2007; price: 111.54; symbol: IBM", + "x": 298.37913074712645, + "y": 344.23, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2007; price: 112.6; symbol: IBM", + "x": 301.71964798850576, + "y": 343.70000000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2007; price: 111; symbol: IBM", + "x": 304.9524066091954, + "y": 344.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2007; price: 100.9; symbol: IBM", + "x": 308.2929238505747, + "y": 349.54999999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2007; price: 103.7; symbol: IBM", + "x": 311.5301724137931, + "y": 348.15, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2008; price: 102.75; symbol: IBM", + "x": 314.87068965517244, + "y": 348.625, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2008; price: 109.64; symbol: IBM", + "x": 318.21120689655174, + "y": 345.18, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2008; price: 110.87; symbol: IBM", + "x": 321.33620689655174, + "y": 344.565, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2008; price: 116.23; symbol: IBM", + "x": 324.6722341954023, + "y": 341.885, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2008; price: 125.14; symbol: IBM", + "x": 327.9049928160919, + "y": 337.43, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2008; price: 114.6; symbol: IBM", + "x": 331.2455100574712, + "y": 342.7, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2008; price: 123.74; symbol: IBM", + "x": 334.47826867816093, + "y": 338.13, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2008; price: 118.16; symbol: IBM", + "x": 337.81878591954023, + "y": 340.92, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2008; price: 113.53; symbol: IBM", + "x": 341.15930316091954, + "y": 343.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2008; price: 90.24; symbol: IBM", + "x": 344.3920617816092, + "y": 354.88, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2008; price: 79.65; symbol: IBM", + "x": 347.7325790229885, + "y": 360.175, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2008; price: 82.15; symbol: IBM", + "x": 350.9698275862069, + "y": 358.92499999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2009; price: 89.46; symbol: IBM", + "x": 354.3103448275862, + "y": 355.27000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2009; price: 90.32; symbol: IBM", + "x": 357.6508620689655, + "y": 354.84, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2009; price: 95.09; symbol: IBM", + "x": 360.6681034482759, + "y": 352.455, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Apr 01, 2009; price: 101.29; symbol: IBM", + "x": 364.00413074712645, + "y": 349.355, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: May 01, 2009; price: 104.85; symbol: IBM", + "x": 367.2368893678161, + "y": 347.575, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jun 01, 2009; price: 103.01; symbol: IBM", + "x": 370.5774066091954, + "y": 348.495, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jul 01, 2009; price: 116.34; symbol: IBM", + "x": 373.81016522988506, + "y": 341.83, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Aug 01, 2009; price: 117; symbol: IBM", + "x": 377.15068247126436, + "y": 341.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Sep 01, 2009; price: 118.55; symbol: IBM", + "x": 380.49119971264366, + "y": 340.72499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Oct 01, 2009; price: 119.54; symbol: IBM", + "x": 383.72395833333337, + "y": 340.22999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Nov 01, 2009; price: 125.79; symbol: IBM", + "x": 387.0644755747127, + "y": 337.10499999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Dec 01, 2009; price: 130.32; symbol: IBM", + "x": 390.30172413793105, + "y": 334.84, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Jan 01, 2010; price: 121.85; symbol: IBM", + "x": 393.64224137931035, + "y": 339.075, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Feb 01, 2010; price: 127.16; symbol: IBM", + "x": 396.98275862068965, + "y": 336.41999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 2 + ], + "description": "date: Mar 01, 2010; price: 125.55; symbol: IBM", + "x": 400, + "y": 337.225, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "width": 400, + "height": 400 + }, + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2004; price: 102.37; symbol: GOOG", + "x": 180.38344109195404, + "y": 348.815, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2004; price: 129.6; symbol: GOOG", + "x": 183.72395833333331, + "y": 335.2, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2004; price: 190.64; symbol: GOOG", + "x": 186.956716954023, + "y": 304.68, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2004; price: 181.98; symbol: GOOG", + "x": 190.30172413793102, + "y": 309.01, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2004; price: 192.79; symbol: GOOG", + "x": 193.5344827586207, + "y": 303.605, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2005; price: 195.62; symbol: GOOG", + "x": 196.875, + "y": 302.19, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2005; price: 187.99; symbol: GOOG", + "x": 200.2155172413793, + "y": 306.005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2005; price: 180.51; symbol: GOOG", + "x": 203.23275862068962, + "y": 309.745, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Apr 01, 2005; price: 220; symbol: GOOG", + "x": 206.57327586206895, + "y": 290, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: May 01, 2005; price: 277.27; symbol: GOOG", + "x": 209.80154454022988, + "y": 261.365, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jun 01, 2005; price: 294.15; symbol: GOOG", + "x": 213.1420617816092, + "y": 252.925, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jul 01, 2005; price: 287.76; symbol: GOOG", + "x": 216.37482040229884, + "y": 256.12000000000006, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2005; price: 286; symbol: GOOG", + "x": 219.71533764367814, + "y": 257, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2005; price: 316.46; symbol: GOOG", + "x": 223.05585488505747, + "y": 241.76999999999998, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2005; price: 372.14; symbol: GOOG", + "x": 226.28861350574715, + "y": 213.93, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2005; price: 404.91; symbol: GOOG", + "x": 229.63362068965517, + "y": 197.545, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2005; price: 414.86; symbol: GOOG", + "x": 232.86637931034483, + "y": 192.57, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2006; price: 432.66; symbol: GOOG", + "x": 236.20689655172416, + "y": 183.67, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2006; price: 362.62; symbol: GOOG", + "x": 239.54741379310346, + "y": 218.69, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2006; price: 390; symbol: GOOG", + "x": 242.56465517241378, + "y": 204.99999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Apr 01, 2006; price: 417.94; symbol: GOOG", + "x": 245.9051724137931, + "y": 191.03, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: May 01, 2006; price: 371.82; symbol: GOOG", + "x": 249.13344109195404, + "y": 214.09000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jun 01, 2006; price: 419.33; symbol: GOOG", + "x": 252.47395833333334, + "y": 190.335, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jul 01, 2006; price: 386.6; symbol: GOOG", + "x": 255.706716954023, + "y": 206.70000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2006; price: 378.53; symbol: GOOG", + "x": 259.0472341954023, + "y": 210.735, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2006; price: 401.9; symbol: GOOG", + "x": 262.3877514367816, + "y": 199.04999999999998, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2006; price: 476.39; symbol: GOOG", + "x": 265.6205100574712, + "y": 161.805, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2006; price: 484.81; symbol: GOOG", + "x": 268.9655172413793, + "y": 157.59500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2006; price: 460.48; symbol: GOOG", + "x": 272.19827586206895, + "y": 169.76, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2007; price: 501.5; symbol: GOOG", + "x": 275.53879310344826, + "y": 149.25000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2007; price: 449.45; symbol: GOOG", + "x": 278.87931034482756, + "y": 175.27500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2007; price: 458.16; symbol: GOOG", + "x": 281.89655172413796, + "y": 170.92000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Apr 01, 2007; price: 471.38; symbol: GOOG", + "x": 285.2325790229885, + "y": 164.31, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: May 01, 2007; price: 497.91; symbol: GOOG", + "x": 288.46533764367814, + "y": 151.04500000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jun 01, 2007; price: 522.7; symbol: GOOG", + "x": 291.80585488505744, + "y": 138.64999999999998, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jul 01, 2007; price: 510; symbol: GOOG", + "x": 295.03861350574715, + "y": 145.00000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2007; price: 515.25; symbol: GOOG", + "x": 298.37913074712645, + "y": 142.375, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2007; price: 567.27; symbol: GOOG", + "x": 301.71964798850576, + "y": 116.36500000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2007; price: 707; symbol: GOOG", + "x": 304.9524066091954, + "y": 46.499999999999986, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2007; price: 693; symbol: GOOG", + "x": 308.2929238505747, + "y": 53.500000000000014, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2007; price: 691.48; symbol: GOOG", + "x": 311.5301724137931, + "y": 54.25999999999998, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2008; price: 564.3; symbol: GOOG", + "x": 314.87068965517244, + "y": 117.85000000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2008; price: 471.18; symbol: GOOG", + "x": 318.21120689655174, + "y": 164.41, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2008; price: 440.47; symbol: GOOG", + "x": 321.33620689655174, + "y": 179.765, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Apr 01, 2008; price: 574.29; symbol: GOOG", + "x": 324.6722341954023, + "y": 112.85500000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: May 01, 2008; price: 585.8; symbol: GOOG", + "x": 327.9049928160919, + "y": 107.10000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jun 01, 2008; price: 526.42; symbol: GOOG", + "x": 331.2455100574712, + "y": 136.79000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jul 01, 2008; price: 473.75; symbol: GOOG", + "x": 334.47826867816093, + "y": 163.125, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2008; price: 463.29; symbol: GOOG", + "x": 337.81878591954023, + "y": 168.355, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2008; price: 400.52; symbol: GOOG", + "x": 341.15930316091954, + "y": 199.74000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2008; price: 359.36; symbol: GOOG", + "x": 344.3920617816092, + "y": 220.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2008; price: 292.96; symbol: GOOG", + "x": 347.7325790229885, + "y": 253.52, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2008; price: 307.65; symbol: GOOG", + "x": 350.9698275862069, + "y": 246.17500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2009; price: 338.53; symbol: GOOG", + "x": 354.3103448275862, + "y": 230.73500000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2009; price: 337.99; symbol: GOOG", + "x": 357.6508620689655, + "y": 231.005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2009; price: 348.06; symbol: GOOG", + "x": 360.6681034482759, + "y": 225.97, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Apr 01, 2009; price: 395.97; symbol: GOOG", + "x": 364.00413074712645, + "y": 202.01500000000001, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: May 01, 2009; price: 417.23; symbol: GOOG", + "x": 367.2368893678161, + "y": 191.385, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jun 01, 2009; price: 421.59; symbol: GOOG", + "x": 370.5774066091954, + "y": 189.205, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jul 01, 2009; price: 443.05; symbol: GOOG", + "x": 373.81016522988506, + "y": 178.475, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Aug 01, 2009; price: 461.67; symbol: GOOG", + "x": 377.15068247126436, + "y": 169.16500000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Sep 01, 2009; price: 495.85; symbol: GOOG", + "x": 380.49119971264366, + "y": 152.07500000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Oct 01, 2009; price: 536.12; symbol: GOOG", + "x": 383.72395833333337, + "y": 131.94, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Nov 01, 2009; price: 583; symbol: GOOG", + "x": 387.0644755747127, + "y": 108.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Dec 01, 2009; price: 619.98; symbol: GOOG", + "x": 390.30172413793105, + "y": 90.01000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Jan 01, 2010; price: 529.94; symbol: GOOG", + "x": 393.64224137931035, + "y": 135.02999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Feb 01, 2010; price: 526.8; symbol: GOOG", + "x": 396.98275862068965, + "y": 136.60000000000002, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 4, + 2 + ], + "description": "date: Mar 01, 2010; price: 560.19; symbol: GOOG", + "x": 400, + "y": 119.90499999999997, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "width": 400, + "height": 400 + }, + { + "items": [ + { + "clip": false, + "interactive": true, + "items": [ + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2000; price: 25.94; symbol: AAPL", + "x": 0, + "y": 387.03, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2000; price: 28.66; symbol: AAPL", + "x": 3.34051724137931, + "y": 385.67, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2000; price: 33.95; symbol: AAPL", + "x": 6.4655172413793105, + "y": 383.025, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2000; price: 31.01; symbol: AAPL", + "x": 9.806034482758621, + "y": 384.495, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2000; price: 21; symbol: AAPL", + "x": 13.034303160919542, + "y": 389.5, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2000; price: 26.19; symbol: AAPL", + "x": 16.37482040229885, + "y": 386.90500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2000; price: 25.41; symbol: AAPL", + "x": 19.607579022988507, + "y": 387.295, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2000; price: 30.47; symbol: AAPL", + "x": 22.948096264367816, + "y": 384.765, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2000; price: 12.88; symbol: AAPL", + "x": 26.288613505747126, + "y": 393.56, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2000; price: 9.78; symbol: AAPL", + "x": 29.52137212643678, + "y": 395.10999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2000; price: 8.25; symbol: AAPL", + "x": 32.866379310344826, + "y": 395.875, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2000; price: 7.44; symbol: AAPL", + "x": 36.099137931034484, + "y": 396.28000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2001; price: 10.81; symbol: AAPL", + "x": 39.439655172413794, + "y": 394.59499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2001; price: 9.12; symbol: AAPL", + "x": 42.7801724137931, + "y": 395.44, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2001; price: 11.03; symbol: AAPL", + "x": 45.797413793103445, + "y": 394.485, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2001; price: 12.74; symbol: AAPL", + "x": 49.137931034482754, + "y": 393.63, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2001; price: 9.98; symbol: AAPL", + "x": 52.36619971264368, + "y": 395.01, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2001; price: 11.62; symbol: AAPL", + "x": 55.70671695402298, + "y": 394.19, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2001; price: 9.4; symbol: AAPL", + "x": 58.93947557471264, + "y": 395.3, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2001; price: 9.27; symbol: AAPL", + "x": 62.279992816091955, + "y": 395.365, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2001; price: 7.76; symbol: AAPL", + "x": 65.62051005747126, + "y": 396.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2001; price: 8.78; symbol: AAPL", + "x": 68.85326867816092, + "y": 395.61, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2001; price: 10.65; symbol: AAPL", + "x": 72.19827586206897, + "y": 394.675, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2001; price: 10.95; symbol: AAPL", + "x": 75.43103448275862, + "y": 394.52500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2002; price: 12.36; symbol: AAPL", + "x": 78.77155172413794, + "y": 393.82, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2002; price: 10.85; symbol: AAPL", + "x": 82.11206896551724, + "y": 394.575, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2002; price: 11.84; symbol: AAPL", + "x": 85.12931034482759, + "y": 394.08, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2002; price: 12.14; symbol: AAPL", + "x": 88.46982758620689, + "y": 393.93, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2002; price: 11.65; symbol: AAPL", + "x": 91.6980962643678, + "y": 394.175, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2002; price: 8.86; symbol: AAPL", + "x": 95.03861350574712, + "y": 395.57000000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2002; price: 7.63; symbol: AAPL", + "x": 98.27137212643679, + "y": 396.185, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2002; price: 7.38; symbol: AAPL", + "x": 101.61188936781609, + "y": 396.31, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2002; price: 7.25; symbol: AAPL", + "x": 104.9524066091954, + "y": 396.375, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2002; price: 8.03; symbol: AAPL", + "x": 108.18516522988506, + "y": 395.985, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2002; price: 7.75; symbol: AAPL", + "x": 111.53017241379311, + "y": 396.125, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2002; price: 7.16; symbol: AAPL", + "x": 114.76293103448276, + "y": 396.42, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2003; price: 7.18; symbol: AAPL", + "x": 118.10344827586208, + "y": 396.41, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2003; price: 7.51; symbol: AAPL", + "x": 121.44396551724137, + "y": 396.245, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2003; price: 7.07; symbol: AAPL", + "x": 124.46120689655173, + "y": 396.465, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2003; price: 7.11; symbol: AAPL", + "x": 127.80172413793103, + "y": 396.445, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2003; price: 8.98; symbol: AAPL", + "x": 131.02999281609195, + "y": 395.51, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2003; price: 9.53; symbol: AAPL", + "x": 134.37051005747128, + "y": 395.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2003; price: 10.54; symbol: AAPL", + "x": 137.60326867816093, + "y": 394.72999999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2003; price: 11.31; symbol: AAPL", + "x": 140.94378591954023, + "y": 394.34499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2003; price: 10.36; symbol: AAPL", + "x": 144.28430316091954, + "y": 394.82, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2003; price: 11.44; symbol: AAPL", + "x": 147.5170617816092, + "y": 394.28000000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2003; price: 10.45; symbol: AAPL", + "x": 150.86206896551724, + "y": 394.77500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2003; price: 10.69; symbol: AAPL", + "x": 154.0948275862069, + "y": 394.65500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2004; price: 11.28; symbol: AAPL", + "x": 157.43534482758622, + "y": 394.36, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2004; price: 11.96; symbol: AAPL", + "x": 160.77586206896552, + "y": 394.02, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2004; price: 13.52; symbol: AAPL", + "x": 163.90086206896552, + "y": 393.24, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2004; price: 12.89; symbol: AAPL", + "x": 167.24137931034483, + "y": 393.555, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2004; price: 14.03; symbol: AAPL", + "x": 170.46964798850576, + "y": 392.985, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2004; price: 16.27; symbol: AAPL", + "x": 173.81016522988506, + "y": 391.865, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2004; price: 16.17; symbol: AAPL", + "x": 177.0429238505747, + "y": 391.915, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2004; price: 17.25; symbol: AAPL", + "x": 180.38344109195404, + "y": 391.375, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2004; price: 19.38; symbol: AAPL", + "x": 183.72395833333331, + "y": 390.31, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2004; price: 26.2; symbol: AAPL", + "x": 186.956716954023, + "y": 386.9, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2004; price: 33.53; symbol: AAPL", + "x": 190.30172413793102, + "y": 383.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2004; price: 32.2; symbol: AAPL", + "x": 193.5344827586207, + "y": 383.9, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2005; price: 38.45; symbol: AAPL", + "x": 196.875, + "y": 380.775, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2005; price: 44.86; symbol: AAPL", + "x": 200.2155172413793, + "y": 377.57, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2005; price: 41.67; symbol: AAPL", + "x": 203.23275862068962, + "y": 379.165, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2005; price: 36.06; symbol: AAPL", + "x": 206.57327586206895, + "y": 381.97, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2005; price: 39.76; symbol: AAPL", + "x": 209.80154454022988, + "y": 380.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2005; price: 36.81; symbol: AAPL", + "x": 213.1420617816092, + "y": 381.59499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2005; price: 42.65; symbol: AAPL", + "x": 216.37482040229884, + "y": 378.675, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2005; price: 46.89; symbol: AAPL", + "x": 219.71533764367814, + "y": 376.555, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2005; price: 53.61; symbol: AAPL", + "x": 223.05585488505747, + "y": 373.195, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2005; price: 57.59; symbol: AAPL", + "x": 226.28861350574715, + "y": 371.205, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2005; price: 67.82; symbol: AAPL", + "x": 229.63362068965517, + "y": 366.09, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2005; price: 71.89; symbol: AAPL", + "x": 232.86637931034483, + "y": 364.055, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2006; price: 75.51; symbol: AAPL", + "x": 236.20689655172416, + "y": 362.24499999999995, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2006; price: 68.49; symbol: AAPL", + "x": 239.54741379310346, + "y": 365.755, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2006; price: 62.72; symbol: AAPL", + "x": 242.56465517241378, + "y": 368.64, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2006; price: 70.39; symbol: AAPL", + "x": 245.9051724137931, + "y": 364.805, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2006; price: 59.77; symbol: AAPL", + "x": 249.13344109195404, + "y": 370.115, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2006; price: 57.27; symbol: AAPL", + "x": 252.47395833333334, + "y": 371.365, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2006; price: 67.96; symbol: AAPL", + "x": 255.706716954023, + "y": 366.02000000000004, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2006; price: 67.85; symbol: AAPL", + "x": 259.0472341954023, + "y": 366.07500000000005, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2006; price: 76.98; symbol: AAPL", + "x": 262.3877514367816, + "y": 361.51, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2006; price: 81.08; symbol: AAPL", + "x": 265.6205100574712, + "y": 359.46, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2006; price: 91.66; symbol: AAPL", + "x": 268.9655172413793, + "y": 354.17, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2006; price: 84.84; symbol: AAPL", + "x": 272.19827586206895, + "y": 357.58, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2007; price: 85.73; symbol: AAPL", + "x": 275.53879310344826, + "y": 357.135, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2007; price: 84.61; symbol: AAPL", + "x": 278.87931034482756, + "y": 357.695, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2007; price: 92.91; symbol: AAPL", + "x": 281.89655172413796, + "y": 353.545, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2007; price: 99.8; symbol: AAPL", + "x": 285.2325790229885, + "y": 350.09999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2007; price: 121.19; symbol: AAPL", + "x": 288.46533764367814, + "y": 339.405, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2007; price: 122.04; symbol: AAPL", + "x": 291.80585488505744, + "y": 338.98, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2007; price: 131.76; symbol: AAPL", + "x": 295.03861350574715, + "y": 334.12, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2007; price: 138.48; symbol: AAPL", + "x": 298.37913074712645, + "y": 330.76, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2007; price: 153.47; symbol: AAPL", + "x": 301.71964798850576, + "y": 323.265, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2007; price: 189.95; symbol: AAPL", + "x": 304.9524066091954, + "y": 305.02500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2007; price: 182.22; symbol: AAPL", + "x": 308.2929238505747, + "y": 308.89, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2007; price: 198.08; symbol: AAPL", + "x": 311.5301724137931, + "y": 300.96, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2008; price: 135.36; symbol: AAPL", + "x": 314.87068965517244, + "y": 332.32, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2008; price: 125.02; symbol: AAPL", + "x": 318.21120689655174, + "y": 337.49, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2008; price: 143.5; symbol: AAPL", + "x": 321.33620689655174, + "y": 328.25, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2008; price: 173.95; symbol: AAPL", + "x": 324.6722341954023, + "y": 313.02500000000003, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2008; price: 188.75; symbol: AAPL", + "x": 327.9049928160919, + "y": 305.625, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2008; price: 167.44; symbol: AAPL", + "x": 331.2455100574712, + "y": 316.28, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2008; price: 158.95; symbol: AAPL", + "x": 334.47826867816093, + "y": 320.525, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2008; price: 169.53; symbol: AAPL", + "x": 337.81878591954023, + "y": 315.235, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2008; price: 113.66; symbol: AAPL", + "x": 341.15930316091954, + "y": 343.17, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2008; price: 107.59; symbol: AAPL", + "x": 344.3920617816092, + "y": 346.205, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2008; price: 92.67; symbol: AAPL", + "x": 347.7325790229885, + "y": 353.66499999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2008; price: 85.35; symbol: AAPL", + "x": 350.9698275862069, + "y": 357.325, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2009; price: 90.13; symbol: AAPL", + "x": 354.3103448275862, + "y": 354.935, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2009; price: 89.31; symbol: AAPL", + "x": 357.6508620689655, + "y": 355.34499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2009; price: 105.12; symbol: AAPL", + "x": 360.6681034482759, + "y": 347.44, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Apr 01, 2009; price: 125.83; symbol: AAPL", + "x": 364.00413074712645, + "y": 337.085, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: May 01, 2009; price: 135.81; symbol: AAPL", + "x": 367.2368893678161, + "y": 332.09499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jun 01, 2009; price: 142.43; symbol: AAPL", + "x": 370.5774066091954, + "y": 328.78499999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jul 01, 2009; price: 163.39; symbol: AAPL", + "x": 373.81016522988506, + "y": 318.305, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Aug 01, 2009; price: 168.21; symbol: AAPL", + "x": 377.15068247126436, + "y": 315.895, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Sep 01, 2009; price: 185.35; symbol: AAPL", + "x": 380.49119971264366, + "y": 307.325, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Oct 01, 2009; price: 188.5; symbol: AAPL", + "x": 383.72395833333337, + "y": 305.75, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Nov 01, 2009; price: 199.91; symbol: AAPL", + "x": 387.0644755747127, + "y": 300.04499999999996, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Dec 01, 2009; price: 210.73; symbol: AAPL", + "x": 390.30172413793105, + "y": 294.635, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Jan 01, 2010; price: 192.06; symbol: AAPL", + "x": 393.64224137931035, + "y": 303.96999999999997, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Feb 01, 2010; price: 204.62; symbol: AAPL", + "x": 396.98275862068965, + "y": 297.68999999999994, + "defined": true + }, + { + "strokeWidth": 2, + "stroke": "#4c78a8", + "strokeDash": [ + 2, + 0 + ], + "description": "date: Mar 01, 2010; price: 223.02; symbol: AAPL", + "x": 400, + "y": 288.49, + "defined": true + } + ], + "marktype": "line", + "name": "marks", + "role": "mark", + "zindex": 0 + } + ], + "width": 400, + "height": 400 + } + ], + "marktype": "group", + "name": "pathgroup", + "role": "scope", + "zindex": 0 + } + ], + "fill": "transparent", + "x": 0, + "y": 0, + "width": 400, + "height": 400, + "stroke": "transparent" + } + ], + "marktype": "group", + "name": "root", + "role": "frame", + "zindex": 0 + } +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/line/line_dashed_butt_undefined.vg.json b/sg2d-vega-test-data/vega-specs/line/line_dashed_butt_undefined.vg.json new file mode 100644 index 0000000..e47efa3 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/line/line_dashed_butt_undefined.vg.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 300, + "height": 200, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + {"u": 1, "v": 28, "defined": true}, + {"u": 2, "v": 55, "defined": true}, + {"u": 3, "v": 42, "defined": true}, + {"u": 3.9, "v": 39, "defined": true}, + {"u": 4, "v": 34, "defined": false}, + {"u": 5, "v": 36, "defined": true}, + {"u": 6, "v": 48, "defined": true}, + {"u": 6.1, "v": 30, "defined": true}, + {"u": 8, "v": 26, "defined": true}, + {"u": 9, "v": 46, "defined": true} + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + {"type": "formula", "expr": "toNumber(datum[\"u\"])", "as": "u"} + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "line", + "sort": {"field": "datum[\"u\"]"}, + "from": {"data": "data_0"}, + "encode": { + "update": { + "strokeCap": {"value": "butt"}, + "strokeJoin": {"value": "miter"}, + "strokeWidth": {"value": 4}, + "strokeDash": {"value": [14, 8]}, + "stroke": {"value": "#4c78a8"}, + "x": {"scale": "x", "field": "u"}, + "y": {"scale": "y", "field": "v"}, + "defined": {"field": "defined"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": [1, 10], + "range": [0, {"signal": "width"}], + "nice": true + }, + { + "name": "y", + "type": "linear", + "domain": [20, 70], + "range": [{"signal": "height"}, 0], + "nice": true + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/line/line_dashed_round_undefined.vg.json b/sg2d-vega-test-data/vega-specs/line/line_dashed_round_undefined.vg.json new file mode 100644 index 0000000..5588fdd --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/line/line_dashed_round_undefined.vg.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 300, + "height": 200, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + {"u": 1, "v": 28, "defined": true}, + {"u": 2, "v": 55, "defined": true}, + {"u": 3, "v": 42, "defined": true}, + {"u": 3.9, "v": 39, "defined": true}, + {"u": 4, "v": 34, "defined": false}, + {"u": 5, "v": 36, "defined": true}, + {"u": 6, "v": 48, "defined": true}, + {"u": 6.1, "v": 30, "defined": true}, + {"u": 8, "v": 26, "defined": true}, + {"u": 9, "v": 46, "defined": true} + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + {"type": "formula", "expr": "toNumber(datum[\"u\"])", "as": "u"} + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "line", + "sort": {"field": "datum[\"u\"]"}, + "from": {"data": "data_0"}, + "encode": { + "update": { + "strokeCap": {"value": "round"}, + "strokeJoin": {"value": "round"}, + "strokeWidth": {"value": 4}, + "strokeDash": {"value": [14, 8]}, + "stroke": {"value": "#4c78a8"}, + "x": {"scale": "x", "field": "u"}, + "y": {"scale": "y", "field": "v"}, + "defined": {"field": "defined"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": [1, 10], + "range": [0, {"signal": "width"}], + "nice": true + }, + { + "name": "y", + "type": "linear", + "domain": [20, 70], + "range": [{"signal": "height"}, 0], + "nice": true + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/line/line_dashed_square_undefined.vg.json b/sg2d-vega-test-data/vega-specs/line/line_dashed_square_undefined.vg.json new file mode 100644 index 0000000..ffa838c --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/line/line_dashed_square_undefined.vg.json @@ -0,0 +1,69 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "background": "white", + "padding": 5, + "width": 300, + "height": 200, + "style": "cell", + "config": {"style": {"cell": {"stroke": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + {"u": 1, "v": 28, "defined": true}, + {"u": 2, "v": 55, "defined": true}, + {"u": 3, "v": 42, "defined": true}, + {"u": 3.9, "v": 39, "defined": true}, + {"u": 4, "v": 34, "defined": false}, + {"u": 5, "v": 36, "defined": true}, + {"u": 6, "v": 48, "defined": true}, + {"u": 6.1, "v": 30, "defined": true}, + {"u": 8, "v": 26, "defined": true}, + {"u": 9, "v": 46, "defined": true} + ] + }, + { + "name": "data_0", + "source": "source_0", + "transform": [ + {"type": "formula", "expr": "toNumber(datum[\"u\"])", "as": "u"} + ] + } + ], + "marks": [ + { + "name": "marks", + "type": "line", + "sort": {"field": "datum[\"u\"]"}, + "from": {"data": "data_0"}, + "encode": { + "update": { + "strokeCap": {"value": "square"}, + "strokeJoin": {"value": "bevel"}, + "strokeWidth": {"value": 4}, + "strokeDash": {"value": [14, 8]}, + "stroke": {"value": "#4c78a8"}, + "x": {"scale": "x", "field": "u"}, + "y": {"scale": "y", "field": "v"}, + "defined": {"field": "defined"} + } + } + } + ], + "scales": [ + { + "name": "x", + "type": "linear", + "domain": [1, 10], + "range": [0, {"signal": "width"}], + "nice": true + }, + { + "name": "y", + "type": "linear", + "domain": [20, 70], + "range": [{"signal": "height"}, 0], + "nice": true + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/line/simple_dashed.vg.json b/sg2d-vega-test-data/vega-specs/line/simple_dashed.vg.json new file mode 100644 index 0000000..94808d7 --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/line/simple_dashed.vg.json @@ -0,0 +1,95 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Line chart with a dashed part created by drawing multiple connecting lines. Note that the data source contains the data point at (E, 81) twice.", + "background": "white", + "padding": 5, + "height": 200, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "values": [ + {"a": "A", "b": 28, "predicted": false}, + {"a": "B", "b": 55, "predicted": false}, + {"a": "D", "b": 91, "predicted": false}, + {"a": "E", "b": 81, "predicted": false}, + {"a": "E", "b": 81, "predicted": true}, + {"a": "G", "b": 19, "predicted": true}, + {"a": "H", "b": 87, "predicted": true} + ] + } + ], + "signals": [ + {"name": "x_step", "value": 20}, + { + "name": "width", + "update": "bandspace(domain('x').length, 1, 0.5) * x_step" + } + ], + "marks": [ + { + "name": "pathgroup", + "type": "group", + "from": { + "facet": { + "name": "faceted_path_main", + "data": "source_0", + "groupby": ["predicted"] + } + }, + "encode": { + "update": { + "width": {"field": {"group": "width"}}, + "height": {"field": {"group": "height"}} + } + }, + "marks": [ + { + "name": "marks", + "type": "line", + "style": ["line"], + "sort": {"field": "datum[\"a\"]"}, + "from": {"data": "faceted_path_main"}, + "encode": { + "update": { + "stroke": {"value": "#4c78a8"}, + "strokeDash": {"scale": "strokeDash", "field": "predicted"}, + "description": { + "signal": "\"a: \" + (isValid(datum[\"a\"]) ? datum[\"a\"] : \"\"+datum[\"a\"]) + \"; b: \" + (format(datum[\"b\"], \"\")) + \"; predicted: \" + (isValid(datum[\"predicted\"]) ? datum[\"predicted\"] : \"\"+datum[\"predicted\"])" + }, + "x": {"scale": "x", "field": "a"}, + "y": {"scale": "y", "field": "b"}, + "defined": { + "signal": "isValid(datum[\"b\"]) && isFinite(+datum[\"b\"])" + } + } + } + } + ] + } + ], + "scales": [ + { + "name": "x", + "type": "point", + "domain": {"data": "source_0", "field": "a", "sort": true}, + "range": {"step": {"signal": "x_step"}}, + "padding": 0.5 + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "b"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "strokeDash", + "type": "ordinal", + "domain": {"data": "source_0", "field": "predicted", "sort": true}, + "range": [[1, 0], [14, 6], [2, 1], [1, 1], [1, 2, 4, 2]] + } + ] +} \ No newline at end of file diff --git a/sg2d-vega-test-data/vega-specs/line/stocks_dashed.vg.json b/sg2d-vega-test-data/vega-specs/line/stocks_dashed.vg.json new file mode 100644 index 0000000..d94730c --- /dev/null +++ b/sg2d-vega-test-data/vega-specs/line/stocks_dashed.vg.json @@ -0,0 +1,86 @@ +{ + "$schema": "https://vega.github.io/schema/vega/v5.json", + "description": "Stock prices of 5 Tech Companies over Time.", + "background": "white", + "padding": 5, + "width": 400, + "height": 400, + "style": "cell", + "encode": {"update": {"stroke": {"value": "transparent"}}}, + "data": [ + { + "name": "source_0", + "url": "data/stocks.csv", + "format": {"type": "csv", "parse": {"date": "date"}, "delimiter": ","} + } + ], + "marks": [ + { + "name": "pathgroup", + "type": "group", + "from": { + "facet": { + "name": "faceted_path_main", + "data": "source_0", + "groupby": ["symbol"] + } + }, + "encode": { + "update": { + "width": {"field": {"group": "width"}}, + "height": {"field": {"group": "height"}} + } + }, + "marks": [ + { + "name": "marks", + "type": "line", + "style": ["line"], + "sort": {"field": "datum[\"date\"]"}, + "from": {"data": "faceted_path_main"}, + "encode": { + "update": { + "stroke": {"value": "#4c78a8"}, + "strokeDash": {"scale": "strokeDash", "field": "symbol"}, + "description": { + "signal": "\"date: \" + (timeFormat(datum[\"date\"], '%b %d, %Y')) + \"; price: \" + (format(datum[\"price\"], \"\")) + \"; symbol: \" + (isValid(datum[\"symbol\"]) ? datum[\"symbol\"] : \"\"+datum[\"symbol\"])" + }, + "x": {"scale": "x", "field": "date"}, + "y": {"scale": "y", "field": "price"}, + "defined": { + "signal": "isValid(datum[\"date\"]) && isFinite(+datum[\"date\"]) && isValid(datum[\"price\"]) && isFinite(+datum[\"price\"])" + } + } + } + } + ] + } + ], + "scales": [ + { + "name": "x", + "type": "time", + "domain": {"data": "source_0", "field": "date"}, + "range": [0, {"signal": "width"}] + }, + { + "name": "y", + "type": "linear", + "domain": {"data": "source_0", "field": "price"}, + "range": [{"signal": "height"}, 0], + "nice": true, + "zero": true + }, + { + "name": "strokeDash", + "type": "ordinal", + "domain": {"data": "source_0", "field": "symbol", "sort": true}, + "range": [ + [2, 0], + [8, 4], + [4, 2], + [2, 2], + [2, 4, 8, 4]] + } + ] +} \ No newline at end of file diff --git a/sg2d-vega/src/marks/area.rs b/sg2d-vega/src/marks/area.rs index 06712cc..33338bd 100644 --- a/sg2d-vega/src/marks/area.rs +++ b/sg2d-vega/src/marks/area.rs @@ -1,6 +1,6 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; -use crate::marks::rule::parse_dash_str; +use crate::marks::values::StrokeDashSpec; use serde::{Deserialize, Serialize}; use sg2d::marks::area::{AreaMark, AreaOrientation}; use sg2d::marks::mark::SceneMark; @@ -22,7 +22,7 @@ pub struct VegaAreaItem { pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, - pub stroke_dash: Option, + pub stroke_dash: Option, pub opacity: Option, } @@ -51,7 +51,7 @@ impl VegaMarkContainer { stroke_width = item.stroke_width.unwrap_or(1.0); } if let Some(d) = &item.stroke_dash { - stroke_dash = Some(parse_dash_str(d)?); + stroke_dash = Some(d.to_array()?.to_vec()); } if let Some(fill_css) = &item.fill { let c = csscolorparser::parse(fill_css)?; diff --git a/sg2d-vega/src/marks/line.rs b/sg2d-vega/src/marks/line.rs index 33862db..33264d3 100644 --- a/sg2d-vega/src/marks/line.rs +++ b/sg2d-vega/src/marks/line.rs @@ -1,6 +1,6 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; -use crate::marks::rule::parse_dash_str; +use crate::marks::values::StrokeDashSpec; use serde::{Deserialize, Serialize}; use sg2d::marks::line::LineMark; use sg2d::marks::mark::SceneMark; @@ -17,7 +17,7 @@ pub struct VegaLineItem { pub stroke: Option, pub stroke_opacity: Option, pub stroke_width: Option, - pub stroke_dash: Option, + pub stroke_dash: Option, pub opacity: Option, } @@ -42,7 +42,7 @@ impl VegaMarkContainer { stroke = [c.r as f32, c.g as f32, c.b as f32, stroke_opacity] } if let Some(d) = &item.stroke_dash { - stroke_dash = Some(parse_dash_str(d)?); + stroke_dash = Some(d.to_array()?.to_vec()); } } diff --git a/sg2d-vega/src/marks/mod.rs b/sg2d-vega/src/marks/mod.rs index 293cca5..8ad2fd0 100644 --- a/sg2d-vega/src/marks/mod.rs +++ b/sg2d-vega/src/marks/mod.rs @@ -10,3 +10,4 @@ pub mod shape; pub mod symbol; pub mod text; pub mod trail; +pub mod values; diff --git a/sg2d-vega/src/marks/rule.rs b/sg2d-vega/src/marks/rule.rs index c14e5f3..d19f8e6 100644 --- a/sg2d-vega/src/marks/rule.rs +++ b/sg2d-vega/src/marks/rule.rs @@ -1,5 +1,6 @@ use crate::error::VegaSceneGraphError; use crate::marks::mark::{VegaMarkContainer, VegaMarkItem}; +use crate::marks::values::StrokeDashSpec; use serde::{Deserialize, Serialize}; use sg2d::marks::mark::SceneMark; use sg2d::marks::rule::RuleMark; @@ -16,7 +17,7 @@ pub struct VegaRuleItem { pub stroke_width: Option, pub stroke_cap: Option, pub stroke_opacity: Option, - pub stroke_dash: Option, + pub stroke_dash: Option, pub opacity: Option, pub zindex: Option, } @@ -68,7 +69,7 @@ impl VegaMarkContainer { } if let Some(dash) = &item.stroke_dash { - stroke_dash.push(parse_dash_str(dash)?); + stroke_dash.push(dash.to_array()?.to_vec()); } if let Some(v) = item.zindex { @@ -117,16 +118,3 @@ impl VegaMarkContainer { Ok(SceneMark::Rule(mark)) } } - -pub fn parse_dash_str(dash_str: &str) -> Result, VegaSceneGraphError> { - let clean_dash_str = dash_str.replace(',', " "); - let mut dashes: Vec = Vec::new(); - for s in clean_dash_str.split_whitespace() { - let d = s - .parse::() - .map_err(|_| VegaSceneGraphError::InvalidDashString(dash_str.to_string()))? - .abs(); - dashes.push(d); - } - Ok(dashes) -} diff --git a/sg2d-vega/src/marks/values.rs b/sg2d-vega/src/marks/values.rs new file mode 100644 index 0000000..dfb6ed5 --- /dev/null +++ b/sg2d-vega/src/marks/values.rs @@ -0,0 +1,30 @@ +use crate::error::VegaSceneGraphError; +use serde::{Deserialize, Serialize}; +use std::borrow::Cow; + +#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)] +#[serde(untagged)] +pub enum StrokeDashSpec { + String(String), + Array(Vec), +} + +impl StrokeDashSpec { + pub fn to_array(&self) -> Result>, VegaSceneGraphError> { + match self { + StrokeDashSpec::Array(a) => Ok(Cow::Borrowed(a)), + StrokeDashSpec::String(s) => { + let clean_dash_str = s.replace(',', " "); + let mut dashes: Vec = Vec::new(); + for s in clean_dash_str.split_whitespace() { + let d = s + .parse::() + .map_err(|_| VegaSceneGraphError::InvalidDashString(s.to_string()))? + .abs(); + dashes.push(d); + } + Ok(Cow::Owned(dashes)) + } + } + } +} diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 9d33535..3ab1d68 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -1,13 +1,14 @@ use crate::error::Sg2dWgpuError; use crate::marks::basic_mark::BasicMarkShader; use itertools::izip; +use lyon::algorithms::measure::{PathMeasurements, PathSampler, SampleType}; use lyon::lyon_tessellation::{ BuffersBuilder, FillOptions, FillTessellator, FillVertex, FillVertexConstructor, StrokeOptions, StrokeTessellator, StrokeVertex, StrokeVertexConstructor, VertexBuffers, }; use lyon::path::builder::WithSvg; use lyon::path::path::BuilderImpl; -use lyon::path::{AttributeIndex, LineCap, LineJoin}; +use lyon::path::{AttributeIndex, LineCap, LineJoin, Path}; use sg2d::marks::area::{AreaMark, AreaOrientation}; use sg2d::marks::line::LineMark; use sg2d::marks::path::PathMark; @@ -214,7 +215,9 @@ impl PathShader { } pub fn from_line_mark(mark: &LineMark) -> Result { - // Build path + let mut defined_paths: Vec = Vec::new(); + + // Build path for each defined line segment let mut path_builder = lyon::path::Path::builder().with_svg(); let mut path_len = 0; for (x, y, defined) in izip!(mark.x_iter(), mark.y_iter(), mark.defined_iter()) { @@ -233,42 +236,104 @@ impl PathShader { // so that stroke caps are drawn path_builder.close(); } + defined_paths.push(path_builder.build()); + path_builder = lyon::path::Path::builder().with_svg(); path_len = 0; } } + defined_paths.push(path_builder.build()); - let path = path_builder.build(); + let defined_paths = if let Some(stroke_dash) = &mark.stroke_dash { + // Create new paths with dashing + let mut dashed_paths: Vec = Vec::new(); + for path in defined_paths.iter() { - // Create vertex/index buffer builder - let mut buffers: VertexBuffers = VertexBuffers::new(); - let mut buffers_builder = BuffersBuilder::new( - &mut buffers, - VertexPositions { - fill: [0.0, 0.0, 0.0, 0.0], - stroke: mark.stroke, - }, - ); + let mut dash_path_builder = lyon::path::Path::builder(); + let path_measurements = PathMeasurements::from_path(&path, 0.1); + let mut sampler = + PathSampler::new(&path_measurements, path, &(), SampleType::Distance); - // Tesselate path - let mut stroke_tessellator = StrokeTessellator::new(); - let stroke_options = StrokeOptions::default() - .with_tolerance(0.05) - .with_line_join(match mark.stroke_join { - StrokeJoin::Miter => LineJoin::Miter, - StrokeJoin::Round => LineJoin::Round, - StrokeJoin::Bevel => LineJoin::Bevel, - }) - .with_line_cap(match mark.stroke_cap { - StrokeCap::Butt => LineCap::Butt, - StrokeCap::Round => LineCap::Round, - StrokeCap::Square => LineCap::Square, - }) - .with_line_width(mark.stroke_width); - stroke_tessellator.tessellate_path(&path, &stroke_options, &mut buffers_builder)?; + // Next index into stroke_dash array + let mut dash_idx = 0; + + // Distance along line from (x0,y0) to (x1,y1) where the next dash will start + let mut start_dash_dist: f32 = 0.0; + + // Total length of line + let line_len = sampler.length(); + + // Whether the next dash length represents a drawn dash (draw == true) + // or a gap (draw == false) + let mut draw = true; + + while start_dash_dist < line_len { + let end_dash_dist = if start_dash_dist + stroke_dash[dash_idx] >= line_len { + // The final dash/gap should be truncated to the end of the line + line_len + } else { + // The dash/gap fits entirely in the rule + start_dash_dist + stroke_dash[dash_idx] + }; + + if draw { + sampler.split_range(start_dash_dist..end_dash_dist, &mut dash_path_builder); + } + + // update start dist for next dash/gap + start_dash_dist = end_dash_dist; + + // increment index and cycle back to start of start of dash array + dash_idx = (dash_idx + 1) % stroke_dash.len(); + + // Alternate between drawn dash and gap + draw = !draw; + } + dashed_paths.push(dash_path_builder.build()) + } + dashed_paths + } else { + defined_paths + }; + + let mut verts: Vec = Vec::new(); + let mut indices: Vec = Vec::new(); + + for path in &defined_paths { + // Create vertex/index buffer builder + let mut buffers: VertexBuffers = VertexBuffers::new(); + let mut buffers_builder = BuffersBuilder::new( + &mut buffers, + VertexPositions { + fill: [0.0, 0.0, 0.0, 0.0], + stroke: mark.stroke, + }, + ); + + // Tesselate path + let mut stroke_tessellator = StrokeTessellator::new(); + let stroke_options = StrokeOptions::default() + .with_tolerance(0.05) + .with_line_join(match mark.stroke_join { + StrokeJoin::Miter => LineJoin::Miter, + StrokeJoin::Round => LineJoin::Round, + StrokeJoin::Bevel => LineJoin::Bevel, + }) + .with_line_cap(match mark.stroke_cap { + StrokeCap::Butt => LineCap::Butt, + StrokeCap::Round => LineCap::Round, + StrokeCap::Square => LineCap::Square, + }) + .with_line_width(mark.stroke_width); + stroke_tessellator.tessellate_path(path, &stroke_options, &mut buffers_builder)?; + + let index_offset = verts.len() as u16; + verts.extend(buffers.vertices); + indices.extend(buffers.indices.into_iter().map(|i| i + index_offset)); + } Ok(Self { - verts: buffers.vertices, - indices: buffers.indices, + verts, + indices, shader: include_str!("path.wgsl").to_string(), vertex_entry_point: "vs_main".to_string(), fragment_entry_point: "fs_main".to_string(), diff --git a/sg2d-wgpu/tests/test_image_baselines.rs b/sg2d-wgpu/tests/test_image_baselines.rs index eec960a..0d50d00 100644 --- a/sg2d-wgpu/tests/test_image_baselines.rs +++ b/sg2d-wgpu/tests/test_image_baselines.rs @@ -79,6 +79,13 @@ mod test_image_baselines { case("line", "connected_scatter", 0.0008), case("line", "lines_with_open_symbols", 0.0004), case("line", "stocks", 0.0005), + case("line", "simple_dashed", 0.0005), + case("line", "stocks_dashed", 0.0005), + case("line", "line_dashed_round_undefined", 0.0005), + + // lyon's square end cap doesn't seem to work + case("line", "line_dashed_square_undefined", 0.007), + case("line", "line_dashed_butt_undefined", 0.0005), case("area", "100_percent_stacked_area", 0.005), case("area", "simple_unemployment", 0.0005), From d57ddc106a96e8d07049269cf9745755bd30cf2c Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 20 Jan 2024 08:51:21 -0500 Subject: [PATCH 2/3] fmt --- sg2d-wgpu/src/marks/path.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 3ab1d68..5d5ca8f 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -247,7 +247,6 @@ impl PathShader { // Create new paths with dashing let mut dashed_paths: Vec = Vec::new(); for path in defined_paths.iter() { - let mut dash_path_builder = lyon::path::Path::builder(); let path_measurements = PathMeasurements::from_path(&path, 0.1); let mut sampler = From e485f77f21e916b00cf194d0cfbd6a3cc5dbfc61 Mon Sep 17 00:00:00 2001 From: Jon Mease Date: Sat, 20 Jan 2024 08:52:15 -0500 Subject: [PATCH 3/3] clippy --- sg2d-wgpu/src/marks/path.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sg2d-wgpu/src/marks/path.rs b/sg2d-wgpu/src/marks/path.rs index 5d5ca8f..00d4569 100644 --- a/sg2d-wgpu/src/marks/path.rs +++ b/sg2d-wgpu/src/marks/path.rs @@ -248,7 +248,7 @@ impl PathShader { let mut dashed_paths: Vec = Vec::new(); for path in defined_paths.iter() { let mut dash_path_builder = lyon::path::Path::builder(); - let path_measurements = PathMeasurements::from_path(&path, 0.1); + let path_measurements = PathMeasurements::from_path(path, 0.1); let mut sampler = PathSampler::new(&path_measurements, path, &(), SampleType::Distance);