堆积的条形图。创建一个包含所有类别信息的集成工具提示(Altair)

时间:2020-01-11 20:11:54

标签: python pandas altair

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

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

  • 日期(年):2020年
  • 计数(总计):2
  • 计数“ true”:1
  • 算“假”:1
  • %'true':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)']
)

output

1 个答案:

答案 0 :(得分: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']
)

enter image description here