Vega:空条标记

Vega: empty bar mark

Vega/Vega-Lite/Altair是否有内置方法为空柱绘制特殊标记?当 x == x2 当前没有显示标记。可能是来自第三种编码的相同预期条形颜色的垂直标尺标记?或者可能是一个半透明的条形标记覆盖了一个带有红色边框的扩展区域?

data =\
[ ("a", 1, 100, 123, 4.5)
, ("a", 2, 140, 190, 5.6)
, ("a", 3, 402, 402, 1.6)
, ("b", 1, 100, 123, 5.7)
, ("b", 2, 134, 456, 6.7)
, ("b", 3, 503, 504, 8.2)
, ("b", 4, 602, 765, 1.1)
, ("c", 1, 95,  95,  0.1)
, ("c", 2, 140, 145, 7.5)
, ("c", 3, 190, 190, 9.9)
]
data = pd.DataFrame(data, columns=["k","ki","min","max","other"])
chart =\
    ( alt.Chart(data)
    . mark_bar()
    . encode
        ( x="min"
        , x2="max"
        , y="k:O"
        , color="ki:N"
        , tooltip=["min", "max", "other"]
        )
    . interactive()
    . properties
        ( width="container"
        , height=300
        )
    )

min/max 的计算转换可以通过扩展区域获得解决方案,在原始 min/max 字段上具有条件不透明度。不确定红色边框。这种方法的缺点是,与规则标记不同,条形会随着缩放而增加。

规则标记的优点是不会歪曲数据,但可能难以发现。它需要一个过滤器转换,虽然我不确定我是否必须从初始条形图构建,或者我是否可以链接 mark_bar -> transform_filter -> mark_rule.

无论如何,解决方案在技术上和数据表示方面都很复杂,我想知道 Vega/Altair 是否有内置解决方案来简化两者。

您可以使用类似 mark_bar(stroke='gray') 的方式设置条形轮廓的描边颜色(默认为透明):然后空条将按轮廓显示: