【发布时间】:2021-11-26 05:02:47
【问题描述】:
我有一个对象数组,我将它们用作交互式数据仪表板中的数据集。我想添加一项新功能,该功能一次仅显示一个对象的数据,而不是从所有对象中提取数据(我已经在这样做并且效果很好)。作为一个测试用例,我创建了一个简单的数组:
var test1 = [
[{
"name": "Piece One",
"amount": 5
}, {
"name": "Piece Two",
"amount": 5
}, {
"name": "Piece Three",
"amount": 5
}],
[{
"name": "Piece One",
"amount": 1
}, {
"name": "Piece Two",
"amount": 1
}, {
"name": "Piece Three",
"amount": 5
}]
];
和 Vega-lite javascript:
var pieCreate = {
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"title": "A pie chart",
"description": "A simple pie chart with embedded data.",
"width": "container",
"height": "container",
"data": {
"values": test1[0]
},
"mark": "arc",
"encoding": {
"theta": {
"field": "amount",
"type": "quantitative"
},
"color": {
"field": "name",
"type": "nominal",
"legend": null
}
}
};
这可行,但我希望用户能够选择要显示的对象(在仪表板中,每个对象都包含不同学校的数据,并且我希望用户能够使用下拉式菜单)。我的第一个想法是在"data": {"values": 字段中设置一个信号,将括号中的数字更改为我想要的数组,但经过大量试验和错误后,我认为这可能是一个死胡同。信号 应该 可以修改 "field": "amount" 和 "field": "name" 但我已经尝试了我能想到的 [0].amount 的每次迭代,同时从 test1[0] 中删除了括号,但没有任何效果.如果我可以通过在"field": 中直接引用它来设法访问该对象,我相信我可以使用信号和 html 表单来弄清楚这个过程,但我开始怀疑我是否走在正确的轨道上。
我还尝试了 vega-lite 文档中概述的过程:https://vega.github.io/vega-lite/tutorials/streaming.html,但它做的事情比我想做的事情复杂得多,而且我的 javascript 知识不足以将其分解为有用的东西。是否有人对如何使用上述任何方法(或新的更好的方法)进行这项工作有任何想法?
【问题讨论】:
-
为了清楚起见,您想在更改下拉列表时将数据从
test[0]更改为test[1]吗?还是与字段有关? -
@wahabmemon 是的,没错。我试图通过字段作为一种解决方法来做到这一点,但实际上最好的解决方案是直接更改用于填充图形的数据(从 test[0] 到 test[1])
标签: javascript arrays data-visualization vega-lite