有没有办法在 Altair 箱线图中格式化工具提示值

Bre*_*son 12 python altair

是否可以格式化箱线图工具提示中的值?从这个Vega 文档来看,似乎是这样,但我不太清楚如何使用 Altair for python 来做到这一点

from vega_datasets import data

import altair as alt

source = data.population.url

alt.Chart(source).mark_boxplot().encode(
    alt.X("age:O"),
    alt.Y("people:Q"),
    tooltip=[
        alt.Tooltip("people:Q", format=",.2f"),
    ],
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

joe*_*lom 12

我相信您需要为复合标记提供聚合,例如mark_boxplot. 这有效:

from vega_datasets import data
import altair as alt

source = data.population.url

alt.Chart(source).mark_boxplot().encode(
    alt.X("age:O"),
    alt.Y("people:Q"),
    tooltip=alt.Tooltip("mean(people):Q", format=",.2f"),)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

更新:由于目前不可能将多个聚合工具提示添加到 boxplot 中,因此我将我的答案与How to change Altair boxplot infobox to displaymeanratherthmedian?结合起来。将带有自定义工具提示的透明框放在箱线图的顶部。我仍然保留了下面的箱线图,以便将异常值和晶须绘制为 Tukey 箱线图而不是最小值-最大值。我还为平均值添加了一个点,因为这是我想在工具提示中看到的内容:

from vega_datasets import data
import altair as alt

source = data.population.url

alt.Chart(source).mark_boxplot().encode(
    alt.X("age:O"),
    alt.Y("people:Q"),
    tooltip=alt.Tooltip("mean(people):Q", format=",.2f"),)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 确实,对我也有用,谢谢!有没有办法添加额外的工具提示...这似乎对我不起作用(抱歉评论中的格式很丑,不太知道如何正确执行此操作)```alt.Chart(源)。 mark_boxplot().encode( alt.X("age:O"), alt.Y("people:Q"), tooltip=[ alt.Tooltip("mean(people):Q", format=",.2f "), alt.Tooltip("min(people):Q", format=",.2f"), ], )``` (4认同)
  • @BrentGunderson 我不确定为什么多个工具提示不适用于 boxplors,但这可能与它们是聚合图有关。我会将其作为一个标有“vega-lite”的新问题来问,看看是否有任何建议。 (2认同)

小智 5

有一种方法可以向工具提示添加多列。您可以将方括号中的多列作为列表传递。

import altair as alt
from vega_datasets import data

stocks = data.stocks()

alt.Chart(stocks).mark_point().transform_window(
    previous_price = 'lag(price)'
).transform_calculate(
    pct_change = '(datum.price - datum.previous_price) / datum.previous_price'
).encode(
    x='date',
    y='price',
    color='symbol',
    tooltip=[ 'price', 'symbol', alt.Tooltip('pct_change:Q', format='.1%')]
)
Run Code Online (Sandbox Code Playgroud)