1 | <!DOCTYPE html>
|
2 | <html lang="en">
|
3 |
|
4 | <head>
|
5 | <meta charset="UTF-8">
|
6 | <meta name="viewport" content="width=device-width, initial-scale=1.0">
|
7 | <meta http-equiv="X-UA-Compatible" content="ie=edge">
|
8 | <meta name="geometry" content="diagram">
|
9 | <link rel="stylesheet" href="./assets/common.css">
|
10 | <title>DataSet State</title>
|
11 | </head>
|
12 |
|
13 | <body>
|
14 | <div id="canvas1"></div>
|
15 | <div id="canvas2"></div>
|
16 | <script src="./assets/jquery-3.2.1.min.js"></script>
|
17 | <script src="./assets/data-set.min.js"></script>
|
18 | <script src="./assets/g2.min.js"></script>
|
19 | <script src="../build/g2-brush.js"></script>
|
20 | <script>
|
21 | $.getJSON('./data/sp500.json', function(data) {
|
22 | const ds = new DataSet({
|
23 | state: {
|
24 | dates: null
|
25 | }
|
26 | });
|
27 | const totalDv = ds.createView().source(data);
|
28 | const dv = ds.createView();
|
29 | dv.source(data)
|
30 | .transform({
|
31 | type: 'filter',
|
32 | callback: obj => {
|
33 | if (ds.state.dates) {
|
34 | return ds.state.dates.indexOf(obj.date) > -1;
|
35 | }
|
36 | return obj;
|
37 | }
|
38 | });
|
39 | const chart1 = new G2.Chart({
|
40 | container: 'canvas1',
|
41 | forceFit: true,
|
42 | height: window.innerHeight * (4 / 5),
|
43 | animate: false,
|
44 | padding: [ 50, 40, 50, 80 ]
|
45 | });
|
46 | chart1.source(dv, {
|
47 | date: {
|
48 | tickCount: 10,
|
49 | type: 'time',
|
50 | mask: 'MMM D YYYY'
|
51 | },
|
52 | price: {
|
53 | min: totalDv.min('price'),
|
54 | max: totalDv.max('price')
|
55 | }
|
56 | });
|
57 | chart1.area()
|
58 | .position('date*price')
|
59 | .shape('smooth')
|
60 | .opacity(0.85);
|
61 | chart1.render();
|
62 |
|
63 |
|
64 | const chart2 = new G2.Chart({
|
65 | container: 'canvas2',
|
66 | forceFit: true,
|
67 | height: window.innerHeight * (1.5 / 5),
|
68 | padding: [ 5, 40, 60, 80 ]
|
69 | });
|
70 | chart2.source(data, {
|
71 | date: {
|
72 | tickCount: 10,
|
73 | type: 'time',
|
74 | mask: 'YYYY'
|
75 | }
|
76 | });
|
77 | chart2.tooltip(false);
|
78 | chart2.axis('price', false);
|
79 | chart2.area()
|
80 | .position('date*price')
|
81 | .active(false)
|
82 | .shape('smooth')
|
83 | .opacity(0.85);
|
84 | chart2.render();
|
85 |
|
86 | new Brush({
|
87 | canvas: chart2.get('canvas'),
|
88 | chart: chart2,
|
89 | type: 'X',
|
90 | dragable: true,
|
91 | onBrushmove(ev) {
|
92 | const { date } = ev;
|
93 | ds.setState('dates', date);
|
94 | },
|
95 | onDragmove(ev) {
|
96 | const { date } = ev;
|
97 | ds.setState('dates', date);
|
98 | }
|
99 | });
|
100 | });
|
101 | </script>
|
102 | </body>
|
103 |
|
104 | </html>
|
105 |
|