【问题标题】:Stacked bar chart. Create one integrated Tooltip with information from all categories (Altair)堆积条形图。创建一个包含所有类别信息的集成工具提示 (Altair)
【发布时间】:2020-01-12 04:40:51
【问题描述】:

目前,我图表中的工具提示对于条形的每个“堆栈”/类别都是独立的。

我想创建一个统一的工具提示,在同一栏的任何位置显示来自所有类别的相同集成信息。 例如:

  • 日期(年):2020年​​i>
  • 计数(总数):2
  • 计数“真”:1
  • 计数“假”:1
  • %“真”:50%

这在 Altair 中是否可行? 在我现在的代码和输出下方。

import altair as alt
import pandas as pd

df = pd.DataFrame({
    'date': ['20-03-2017', '20-03-2017', '20-03-2018', '21-03-2018', '20-10-2019', '20-03-2019', '1-02-2019', '10-03-2020', '20-06-2020'],
    'value': [True, True, True, False, True, False, False, True, False]
})

df['date'] = pd.to_datetime(df['date'])

alt.Chart(df).mark_bar().encode(
    x = 'year(date):O',
    y = 'count(value)',
    color = 'value',
    tooltip = ['year(date)', 'count(value)']
)

【问题讨论】:

    标签: python pandas altair


    【解决方案1】:

    没有任何超级干净的方法可以做到这一点,因为给定标记的工具提示(例如,其中一个条的橙色部分)只能包含与该标记实际关联的值。

    因此,要获得您想要的行为,您必须使用 transforms 来计算这些聚合值并将它们与原始数据集连接起来,以便工具提示可以访问它们以获取所需标记。这是一个例子:

    alt.Chart(df).transform_timeunit(
        year='year(date)'
    ).transform_joinaggregate(
        count='count(value)',
        count_true='sum(value)',
        groupby=['year']
    ).transform_calculate(
        count_false = "datum.count - datum.count_true"
    ).mark_bar(opacity=1).encode(
        x='year(date):O',
        y='count():Q',
        color='value',
        tooltip=['year(date):O', 'count:Q', 'count_true:Q', 'count_false:Q']
    )
    

    【讨论】:

    • 感谢杰克的详尽回答!现在,我决定让它更简单。
    • 我注意到我的问题背后的问题是,知道计数仅适用于栏的一部分并不直观。所以我将工具提示更新为:“tooltip = ['year(date)', 'value', 'count(value)']”。现在这是非常清楚和明确的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多