首页 > 解决方案 > 如何使用 mark_rule() 在 Altair 图表中显示垂直线

问题描述

我正在使用 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

在此处输入图像描述

有什么建议么?谢谢!

标签: pythonaltair

解决方案


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

对于 Altair 中的分位数,您可以使用分位数变换。这是您的数据的示例:

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

chart + Q1

在此处输入图像描述


推荐阅读