Projekt

Obecné

Profil

Stáhnout (5.71 KB) Statistiky
| Větev: | Tag: | Revize:
1
{
2
  "$schema": "https://vega.github.io/schema/vega/v5.json",
3
  "description": "Area charts of stock prices, with an interactive overview and filtered detail views.",
4
  "width": 720,
5
  "height": 200,
6
  "padding": 5,
7

    
8

    
9

    
10
  "data": [
11
    {
12
      "name": "table",
13
      "url" : "winds-short.json",
14

    
15
      "transform": [
16
        {
17
          "type": "formula",
18
          "expr": "toDate(datum[\"time\"])",
19
          "as": "dateTime"
20
        }]
21

    
22
    },
23
    {
24
      "name": "table2",
25
      "source": "table",
26
      "transform": [
27
        {
28
          "type": "aggregate",
29
          "fields": ["dateTime", "dateTime"],
30
          "ops": ["min", "max"],
31
          "as": ["dateMinTemp", "dateMaxTemp"]
32
        },
33
        {
34
          "type": "formula",
35
          "expr":"time(datum[\"dateMinTemp\"] - timeStep)",
36
          "as": "dateMin"
37
        },
38
        {
39
          "type": "formula",
40
          "expr":"time(datum[\"dateMaxTemp\"] + timeStep)",
41
          "as": "dateMax"
42
        },
43
        {
44
          "type": "formula",
45
          "expr":"time(datum[\"dateMax\"]) - time(datum[\"dateMin\"])",
46
          "as": "range"
47
        }
48
      ]
49
    }
50
  ],
51

    
52
  "signals": [
53
    {
54
      "name": "timeStep",
55
      "value": 1800000
56
    },
57
    {
58
      "name": "arrowCount",
59
      "value": 25
60
    },
61
    {
62
      "name": "selectionWidth",
63
      "update": "floor((arrowCount * timeStep * width) / data('table2')[0].range)"
64
    },
65
    {
66
      "name": "detailDomain",
67
      "update": "[time(data('table2')[0].dateMin), time(data('table2')[0].dateMin) + (timeStep * arrowCount)] "
68
    }
69
  ],
70

    
71
  "marks": [
72
    {
73
      "type": "group",
74
      "name": "detail",
75
      "encode": {
76
        "enter": {
77
          "height": {"value": 60},
78
          "width": {"value": 720}
79
        }
80
      },
81
      "scales": [
82
        {
83
          "name": "xDetail",
84
          "type": "time",
85
          "range": "width",
86
          "domain": {"signal": "detailDomain"}
87
        }
88
      ],
89
      "axes": [
90
        {"orient": "bottom", "scale": "xDetail"}
91
      ],
92
      "marks": [
93
        {
94
          "type": "group",
95
          "encode": {
96
            "enter": {
97
              "height": {"field": {"group": "height"}},
98
              "width": {"field": {"group": "width"}},
99
              "clip": {"value": true}
100
            }
101
          },
102
          "marks": [
103
            {
104
              "type": "symbol",
105
              "from": {"data": "table"},
106
              "encode": {
107
                "update": {
108
                  "shape": {"value": "arrow"},
109
                  "size": {"value": 500},
110
                  "x": {"scale": "xDetail", "field": "dateTime"},
111
                  "y": {"value":30},
112
                  "angle":{"field": "value"},
113
                  "color": {"value": "both"},
114
                  "strokeWidth": {"value": 1}
115

    
116
                }
117
              }
118
            }
119
          ]
120
        }
121
      ]
122
    },
123

    
124
    {
125
      "type": "group",
126
      "name": "overview",
127
      "encode": {
128
        "enter": {
129
          "x": {"value": 0},
130
          "y": {"value": 100},
131
          "height": {"value": 70},
132
          "width": {"value": 720},
133
          "fill": {"value": "transparent"}
134
        }
135
      },
136
      "signals": [
137
        {
138
          "name": "brush",
139
          "update": "[0,selectionWidth]",
140
          "on": [
141
            {
142
              "events": {"signal": "delta"},
143
              "update": "clampRange([anchor[0] + delta, anchor[1] + delta], 0, width)"
144
            }
145

    
146
          ]
147
        },
148
        {
149
          "name": "anchor", "value": null,
150
          "on": [{"events": "@brush:mousedown", "update": "slice(brush)"}]
151
        },
152
        {
153
          "name": "xdown", "value": 0,
154
          "on": [{"events": "@brush:mousedown", "update": "x()"}]
155
        },
156
        {
157
          "name": "delta", "value": 0,
158
          "on": [
159
            {
160
              "events": "[@brush:mousedown, window:mouseup] > window:mousemove!",
161
              "update": "x() - xdown"
162
            }
163
          ]
164
        },
165
        {
166
          "name": "detailDomain",
167
          "push": "outer",
168
          "on": [
169
            {
170
              "events": {"signal": "brush"},
171
              "update": "invert('xOverview', brush)"
172
            }
173
          ]
174
        }],
175
      "scales": [
176
        {
177
          "name": "xOverview",
178
          "type": "time",
179
          "range": "width",
180
          "domain": {"data": "table2", "fields": ["dateMin", "dateMax"]}
181
        },
182
        {
183
          "name": "yOverview",
184
          "type": "linear",
185
          "range": [70, 0],
186
          "nice": true, "zero": true
187
        }
188
      ],
189
      "axes": [
190
        {"orient": "bottom", "scale": "xOverview"}
191
      ],
192
      "marks": [
193

    
194
        {
195
          "type": "rect",
196
          "name": "brush",
197
          "encode": {
198
            "enter": {
199
              "y": {"value": 0},
200
              "height": {"value": 70},
201
              "fill": {"value": "#333"},
202
              "fillOpacity": {"value": 0.2}
203
            },
204
            "update": {
205
              "x": {"signal": "brush[0]"},
206
              "x2": {"signal": "brush[1]"}
207
            }
208
          }
209
        },
210
        {
211
          "type": "rect",
212
          "interactive": false,
213
          "encode": {
214
            "enter": {
215
              "y": {"value": 0},
216
              "height": {"value": 70},
217
              "width": {"value": 1},
218
              "fill": {"value": "firebrick"}
219
            },
220
            "update": {
221
              "x": {"signal": "brush[0]"}
222
            }
223
          }
224
        },
225
        {
226
          "type": "rect",
227
          "interactive": false,
228
          "encode": {
229
            "enter": {
230
              "y": {"value": 0},
231
              "height": {"value": 70},
232
              "width": {"value": 1},
233
              "fill": {"value": "firebrick"}
234
            },
235
            "update": {
236
              "x": {"signal": "brush[1]"}
237
            }
238
          }
239
        }
240

    
241

    
242
      ]
243
    }
244

    
245

    
246

    
247

    
248

    
249

    
250
  ]
251
}
(3-3/8)