UNPKG

2.42 kBHTMLView Raw
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 // second chart
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