Vega-Lite Calculated Scale 域最大
Vega-Lite Calculated Scale domainMax
我正在尝试计算 Y 轴刻度上的 domainMax 值。我尝试了以下示例,其中我希望 Y 轴 domainMax 比名为“value”的数据集字段中的最大值大 1。该示例产生错误 'Unrecognized signal name: "domMax"'。我怎样才能让它工作?
{
"data": {
"values": [
{"date": "2021-03-01T00:00:00", "value": 1},
{"date": "2021-04-01T00:00:00", "value": 3},
{"date": "2021-05-01T00:00:00", "value": 2}
]
},
"transform": [
{ "calculate": "max(datum.value)+1","as": "domMax"}
],
"mark": "line",
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {"field": "value", "type": "quantitative",
"scale": {"domainMax": {"expr": "domMax"}}
}
}
}
这个变换
"transform": [
{ "calculate": "max(datum.value)+1","as": "domMax"}
]
向您的数据集添加一个新列 - 它不会创建新信号。您可以检查 in the editor。转到 DataViewer 选项卡,然后从下拉列表中选择 select data_0。你能看到新的 domMax 列吗?
信号是完全不同的东西——看看文档中的 here。请注意 link 指向 Vega,而不是 Vega-Lite。 (Vega-Lite 规格被编译为 Vega。)
Vega-Lite 不允许你声明信号;您改为声明参数。这里是 another example 使用 domMax
参数。 Vega-Lite 参数被转换为 Vega 信号。
您似乎正试图从数据中推导出 parameter/signal 的值。我不确定您是否可以在 Vega-Lite.
中做到这一点
另一方面,这在 Vega 中非常容易。例如,您可以使用范围变换:
https://vega.github.io/vega/docs/transforms/extent/
旁注 - 虽然 Vega 规范更为冗长,但您有时会发现它们的原语更简单,并且是理解可视化工作原理的好方法。 (可以在编辑器中看到编译好的Vega。)
我尝试根据数据获取自定义域,但遇到了与您相同的限制。
就我而言,我从外部更新数据有点像 the streaming example。我从外部计算域并在可视化中使用参数修改它们。这很容易,因为 vega-lite 参数被暴露为 vega 信号。
这是布局的要点:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"params": [
{
"name": "lowBound",
"value": -10
},
{
"name": "highBound",
"value": 100
}
],
../..
"vconcat": [
{
"name": "detailed",
../..
"layer": [
{
../..
"mark": "line",
"encoding": {
"y": {
"field": "value",
"title": "Temperature",
"type": "quantitative",
"scale": {
"domainMin": {
"expr": "lowBound"
},
"domainMax": {
"expr": "highBound"
}
}
},
...
lowBound
和highBound
是通过vega信号动态变化的。我用常规 JS API.
更改它们
我正在尝试计算 Y 轴刻度上的 domainMax 值。我尝试了以下示例,其中我希望 Y 轴 domainMax 比名为“value”的数据集字段中的最大值大 1。该示例产生错误 'Unrecognized signal name: "domMax"'。我怎样才能让它工作?
{
"data": {
"values": [
{"date": "2021-03-01T00:00:00", "value": 1},
{"date": "2021-04-01T00:00:00", "value": 3},
{"date": "2021-05-01T00:00:00", "value": 2}
]
},
"transform": [
{ "calculate": "max(datum.value)+1","as": "domMax"}
],
"mark": "line",
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {"field": "value", "type": "quantitative",
"scale": {"domainMax": {"expr": "domMax"}}
}
}
}
这个变换
"transform": [ { "calculate": "max(datum.value)+1","as": "domMax"} ]
向您的数据集添加一个新列 - 它不会创建新信号。您可以检查 in the editor。转到 DataViewer 选项卡,然后从下拉列表中选择 select data_0。你能看到新的 domMax 列吗?
信号是完全不同的东西——看看文档中的 here。请注意 link 指向 Vega,而不是 Vega-Lite。 (Vega-Lite 规格被编译为 Vega。)
Vega-Lite 不允许你声明信号;您改为声明参数。这里是 another example 使用
domMax
参数。 Vega-Lite 参数被转换为 Vega 信号。您似乎正试图从数据中推导出 parameter/signal 的值。我不确定您是否可以在 Vega-Lite.
中做到这一点另一方面,这在 Vega 中非常容易。例如,您可以使用范围变换: https://vega.github.io/vega/docs/transforms/extent/
旁注 - 虽然 Vega 规范更为冗长,但您有时会发现它们的原语更简单,并且是理解可视化工作原理的好方法。 (可以在编辑器中看到编译好的Vega。)
我尝试根据数据获取自定义域,但遇到了与您相同的限制。
就我而言,我从外部更新数据有点像 the streaming example。我从外部计算域并在可视化中使用参数修改它们。这很容易,因为 vega-lite 参数被暴露为 vega 信号。
这是布局的要点:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"params": [
{
"name": "lowBound",
"value": -10
},
{
"name": "highBound",
"value": 100
}
],
../..
"vconcat": [
{
"name": "detailed",
../..
"layer": [
{
../..
"mark": "line",
"encoding": {
"y": {
"field": "value",
"title": "Temperature",
"type": "quantitative",
"scale": {
"domainMin": {
"expr": "lowBound"
},
"domainMax": {
"expr": "highBound"
}
}
},
...
lowBound
和highBound
是通过vega信号动态变化的。我用常规 JS API.