使用 Vega 库创建停产折线图
Create a discontinued line chart using Vega lib
我想在 Vega 中创建这种图表:
我在这里仔细阅读了关于标记的文档:
https://vega.github.io/vega/docs/marks/line/
我阅读了有关 Type-Specific Mark Properties 和 defined 属性 的内容,这似乎是我需要的.但是我不知道如何使用这个 属性.
我的分数是这样定义的:
'marks': [
{
'name': 'expected_sales',
'description': 'The sales line',
'type': 'line',
'defined': 'false', // this I added based on the documentation
'from': {
'data': 'SalesData'
},
'zindex': 100,
'encode': { ... }
}
]
但这显然行不通。该行仍在继续。我不得不提到我得到的数据点没有 null
值,但是 0.0
.
考虑到销售额在某个时候可能为 0 美元,最好区分 0
值和 null
值。
也就是说,因为空值在数据集中定义为 0.0
,所以 defined
属性 必须对所有其他点为真,除非值为 0.0
在下面的示例中,如果值 "datum.v"
为 0.0
,则 "defined": {"signal": "datum.v !== 0.0"}
用于有条件地将 "defined"
属性 赋给 false
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 400,
"height": 200,
"padding": 5,
"data": [
{
"name": "table",
"values": [
{"u": 1, "v": 28}, {"u": 2, "v": 12.0},
{"u": 3, "v": 0.0}, {"u": 4, "v": 10},
{"u": 5, "v": 36}, {"u": 6, "v": 44}
]
}
],
"scales": [
{
"name": "xscale",
"type": "linear",
"range": "width",
"zero": false,
"domain": {"data": "table", "field": "u"}
},
{
"name": "yscale",
"type": "linear",
"range": "height",
"nice": true,
"zero": false,
"domain": {"data": "table", "field": "v"}
}
],
"axes": [
{"scale": "xscale", "orient": "bottom", "grid": true},
{"scale": "yscale", "orient": "left"}
],
"marks": [
{
"type": "line",
"from": {"data": "table"},
"encode": {
"enter": {
"stroke": {"value": "#652c90"}
},
"update": {
"x": {"scale": "xscale", "field": "u"},
"y": {"scale": "yscale", "field": "v"},
"defined": {"signal": "datum.v !== 0.0"},
"interpolate": {"value": "linear"},
"strokeWidth": {"value": 4},
"strokeDash": {"value": [1,0]},
"strokeCap": {"value": "square"},
"opacity": {"value": 1}
},
"hover": {
"opacity": {"value": 0.5}
}
}
}
]
}
我想在 Vega 中创建这种图表:
我在这里仔细阅读了关于标记的文档: https://vega.github.io/vega/docs/marks/line/
我阅读了有关 Type-Specific Mark Properties 和 defined 属性 的内容,这似乎是我需要的.但是我不知道如何使用这个 属性.
我的分数是这样定义的:
'marks': [
{
'name': 'expected_sales',
'description': 'The sales line',
'type': 'line',
'defined': 'false', // this I added based on the documentation
'from': {
'data': 'SalesData'
},
'zindex': 100,
'encode': { ... }
}
]
但这显然行不通。该行仍在继续。我不得不提到我得到的数据点没有 null
值,但是 0.0
.
考虑到销售额在某个时候可能为 0 美元,最好区分 0
值和 null
值。
也就是说,因为空值在数据集中定义为 0.0
,所以 defined
属性 必须对所有其他点为真,除非值为 0.0
在下面的示例中,如果值 "datum.v"
为 0.0
"defined": {"signal": "datum.v !== 0.0"}
用于有条件地将 "defined"
属性 赋给 false
{
"$schema": "https://vega.github.io/schema/vega/v5.json",
"width": 400,
"height": 200,
"padding": 5,
"data": [
{
"name": "table",
"values": [
{"u": 1, "v": 28}, {"u": 2, "v": 12.0},
{"u": 3, "v": 0.0}, {"u": 4, "v": 10},
{"u": 5, "v": 36}, {"u": 6, "v": 44}
]
}
],
"scales": [
{
"name": "xscale",
"type": "linear",
"range": "width",
"zero": false,
"domain": {"data": "table", "field": "u"}
},
{
"name": "yscale",
"type": "linear",
"range": "height",
"nice": true,
"zero": false,
"domain": {"data": "table", "field": "v"}
}
],
"axes": [
{"scale": "xscale", "orient": "bottom", "grid": true},
{"scale": "yscale", "orient": "left"}
],
"marks": [
{
"type": "line",
"from": {"data": "table"},
"encode": {
"enter": {
"stroke": {"value": "#652c90"}
},
"update": {
"x": {"scale": "xscale", "field": "u"},
"y": {"scale": "yscale", "field": "v"},
"defined": {"signal": "datum.v !== 0.0"},
"interpolate": {"value": "linear"},
"strokeWidth": {"value": 4},
"strokeDash": {"value": [1,0]},
"strokeCap": {"value": "square"},
"opacity": {"value": 1}
},
"hover": {
"opacity": {"value": 0.5}
}
}
}
]
}