使用 alt.condition 作为标记点角度时输入错误

Type error when using alt.condition for mark point angle

我正在尝试根据条件绘制指向左或右的箭头,绿色或红色。它适用于颜色,但不适用于我用于箭头头部的三角形(标记点)的角度。这是数据和代码:

color=alt.condition("datum.Current >= datum.Previous",alt.value("green"),alt.value("red"))
angle=alt.condition("datum.Current >= datum.Previous",alt.value(210),alt.value(30))
alt.Chart(df_chart).mark_point(size=200,shape='triangle'
                    ,angle=angle).encode(alt.X('Current'),alt.Y('Group'),color=color)

我收到此错误:

这就是我将角度更改为数字时得到的结果,它没有错误,只是我没有看到指向左侧的红色箭头:

您不能对 mark 参数使用条件,只能根据 https://github.com/altair-viz/altair/issues/1976encoding 参数使用条件。 现在,由于某种原因,似乎条件语句在传递给 angle 编码时不起作用 (请参阅 Jake 的回答以获得有效的解决方案,我一定是打错了字尝试时),但您可以通过使用 transform_calculate 计算新字段值并引用该字段来解决此问题:

alt.Chart(df_chart).mark_point(size=400, shape='triangle').encode(
    alt.X('Current'),
    alt.Y('Group'),
    angle=alt.Angle('angle:Q', scale=alt.Scale(domain=[0, 360])),
    color='Group:N'
).transform_calculate(
    angle="datum.Current >= datum.Previous ? 210 : 30"
)

使用字段中的角度值时定义域很重要,您可以在此处查看另一个示例https://altair-viz.github.io/gallery/wind_vector_map.html?highlight=wind. Generally I would avoid passing a condition to color just to control the values and instead use the range parameter with an existing field value as explained in the docs https://altair-viz.github.io/user_guide/customization.html#color-domain-and-range

您可以将 alt.condition 传递给角度编码而不是角度标记 属性:

alt.Chart(df).mark_point(size=400, shape='triangle').encode(
    alt.X('Current'),
    alt.Y('Group'),
    angle=alt.condition("datum.Current >= datum.Previous", alt.value(210), alt.value(30)),
    color='Group:N'
)