在 Altair 中绘制具有固定值的标尺?

Draw a ruler with a fixed value in Altair?

我想在我的图表中标记一条线,但是当使用 alt.XValue() 指定该数字的值时,该数字与使用该轴的图表不对齐。

import altair as alt
from vega_datasets import data

source = data.barley()
base = alt.Chart(source)

error_bars = base.mark_errorbar(extent='stdev').encode(
  x=alt.X('yield:Q', scale=alt.Scale(zero=False)),
  y=alt.Y('variety:N')
)

points = base.mark_point(filled=True, color='black').encode(
  x=alt.X('yield:Q', aggregate='mean'),
  y=alt.Y('variety:N'),
)

base = base.mark_rule(color='red', strokeDash=[4, 2]).encode(
    x=alt.XValue(41)
)
error_bars + points + base

任何时候您指定一个编码值,您指定的是一个 range 值,而不是 domain 值。对于位置刻度,范围以屏幕上的像素为单位进行测量,因此 x=alt.XValue(41) 指示图表在距面板左侧 41 像素处绘制一条线。

如果您想指定域值,在当前版本的 Altair 中唯一的方法是通过数据集或计算转换;例如:

base = alt.Chart(
    pd.DataFrame({'x':[41]})
).mark_rule(color='red', strokeDash=[4, 2]).encode(
    x='x'
)