我有一张 Vega-Lite 地图,我对 Vega-Lite 使用条件语句对区域进行着色的行为感到困惑。一些意见将不胜感激。预先感谢。
目标:在我的数据中,一些社区的价值观被压制;我试图将这些抑制值显示为灰色(规范中的
#808080
)并保持工具提示与非抑制邻域上的工具提示相同。对于地图的颜色编码,我有一个条件,测试isValid(datum.Value)
,如果为真,则应用色标,如果为假,则应用#808080
。
问题: 在 Vega 5.30.0 中,5.29.0 的一项更改使 vega 格式
null
为“null”。因此,我相应地测试空数据和样式的条件语句不起作用 - 它不会将它们视为空值,而是将它们视为 0 值。使用Vega 5.30.0,如何将空数据保留为空,以便对其进行条件检查可以准确地找到空数据并按照我想要的方式设置样式?
更多背景:这里有一个规范-要压制的社区之一是西南岛屿的北部社区(“北部SI”)。对于无效数据(其中
datum.Value == null
),它不会应用 #808080
,即语句的 else 部分中的值 - 它只是将这些空值视为 0,并在条件的测试部分中应用色标的最低部分。我尝试过 "test": "isValid(datum.Value)"
(如果值不为空、未定义或 NaN,isValid 应该返回 true,否则返回 false),但它会为 Value == null
的邻域着色。 "test": "datum.Value != null"
也是如此。
我也尝试了一些其他方法(包括添加单独的 true/false
Suppressed
字段),但每种方法似乎都涉及 Vega-Lite 将 null 视为 0,或者努力处理涉及 null 数据的条件测试。在实验时,如果我反转逻辑(例如使用 "test": "datum.Suppressed == true"
),“else”将按预期工作,但满足测试条件的样式则不会。
(奇怪的是 - 虽然这可能是一个单独的问题 - 当我使用
"test": "isValid(datum.DisplayValue"
时,它会为 datum.DisplayValue
是字母数字的社区着色;发生了一些我不明白的事情。)
这里非常感谢您的意见!再次提前致谢。