如何使用 mark_rule() 在 Altair 图表中显示垂直线

How to show a vertical line in an Altair chart using mark_rule()

我正在使用 Python & Altair 创建直方图。我可以包括一条垂直线作为平均值,这是可行的,但是第一个四分位数(第 25 个分位数)的代码不会产生垂直线。

我假设这是基于我使用 numpy 函数来计算第一个四分位数。但我不确定如何做不同的事情。

我错过了什么?谢谢!

import pandas as pd
import numpy as np
import altair as alt

df = pd.util.testing.makeDataFrame()

chart = (
    alt.Chart(df)
    .mark_bar()
    .encode(alt.X("A:Q", bin = True), y = "count()")
    .properties(width = 800, height = 300)
) 

# create mean rule ***WORKS***
mean = (
    alt.Chart(df)
    .mark_rule()
    .encode(
        x = "mean(A):Q"
    )
)

chart + mean

# create Q1 rule *** vertical line is NOT showing***
Q1 = (
    alt.Chart(df)
    .mark_rule()
    .encode(
        x = "np.quantile(A, 0.25):Q"
    )
)

chart + Q1

有什么建议吗?谢谢!

A​​ltair 编码字符串不解析任意 python 代码,因此调用 numpy 函数将不起作用。

对于 Altair 中的分位数,您可以使用 quantile transform。以下是您的数据示例:

Q1 = (
    alt.Chart(df)
    .transform_quantile('A', probs=[0.25], as_=['prob', 'value'])
    .mark_rule()
    .encode(
        x = "value:Q"
    )
)

chart + Q1