有没有办法在 vega 重复图中的 vega 表达式中使用图号/标识符?

Posted

技术标签:

【中文标题】有没有办法在 vega 重复图中的 vega 表达式中使用图号/标识符?【英文标题】:Is there a way to use plot number/identifier in a vega expression in vega repeat plot? 【发布时间】:2019-10-10 14:29:25 【问题描述】:

我想使用 vega-lite 制作一个小的倍数图表,显示一系列状态的进展。每个单独的图都包含相同的一组地理点,我希望根据第三个变量着色,具体取决于它在系列中的哪个图。

是否可以使用 vega-lite 根据基于系列中特定倍数位置的规则为点着色?

例如,在多个 1 中,我想将所有值 == 1 的点着色为红色,其余为灰色;在多个 2 中,我想将所有值 == 2 的点着色为红色,其余为灰色;等等等等

到目前为止,我已经尝试在 vega 中设置 repeat 图表(facet 不好,因为我需要每个图中的所有数据)然后在颜色编码上使用条件:

"color": 
        "condition": 
          "test": "datum.rdb == ???",
          "value": "#ff0000"
        ,
     "value":"#aaaaaa" // grey if condition not met

但我不知道 ??? 应该是什么才能获得倍数内每个地块的编号或标识符。

【问题讨论】:

【参考方案1】:

最简单的方法可能是通过分面层图。这个想法是,您将每个面板中的整个数据集在背景中以灰色绘制,并在其上叠加相同数据集的副本(按颜色分面)。

这是一个使用汽车数据集 (vega editor link) 的示例:


  "data": "url": "data/cars.json",
  "facet": "type": "nominal", "field": "Origin",
  "columns": 3,
  "spec": 
    "encoding": 
      "x": "type": "quantitative", "field": "Horsepower",
      "y": "type": "quantitative", "field": "Miles_per_Gallon"
    ,
    "layer": [
      
        "data": "url": "data/cars.json",
        "mark": "type": "point", "color": "lightgray"
      ,
      
        "mark": "point",
        "encoding": "color": "type": "nominal", "field": "Origin"
      
    ]
  

请注意,数据在两个地方指定:背景层指定完整数据集,而前景层从顶层继承分面数据集。

【讨论】:

啊,是的,我没有意识到可以在这样的多个地方指定数据。这正是我想要的。非常感谢。

以上是关于有没有办法在 vega 重复图中的 vega 表达式中使用图号/标识符?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法用 D3.js 修改 Vega 图表?

如何更改 Vega-lite 条形图中条形的颜色?

vegas黑白遮罩的使用。

3种办法教你解决Vegas预览画面卡顿问题

在 vega 中刷/链接(不是 vega-lite)

Vega-Lite:数据中的笔触颜色值?