【问题标题】:How do I compute aggregates of aggregates for labels/tooltips?如何计算标签/工具提示的聚合聚合?
【发布时间】:2019-06-18 19:29:49
【问题描述】:

如果我有汇总的时间序列数据。是否可以执行额外的聚合并将其显示在工具提示中?

这是我的问题的一个更明确的例子。对于下面的代码示例,我们显示了三种不同类型水果按月汇总的权重总和。是否也可以将每个月的总重量(和/或每月按水果划分的标准化重量百分比)显示为标签或工具提示?

我玩过transform_aggregate,但似乎无法让它工作(它最终会破坏group by 的水果)。 :(

dates = np.array([
     np.datetime64('200%s-%.02d-%.02d' % (i,j,k)) 
                   for i in range(5) 
                   for j in range(1,13) 
                   for k in range(1, 29)])
data = pd.DataFrame({
    'timestamp': dates,
    'weight': np.random.randint(0, 20, 1680),
    'fruit': np.random.randint(0,3, 1680)
})
date_month = alt.X('yearmonth(timestamp):O', title='Month')
total = alt.Y('weight:Q', aggregate='sum', title='Metric')

(alt.Chart(data).mark_bar().encode(
    x=date_month,
    y=total,
    color='fruit',
    tooltip=[date_month, total, 'fruit']
))

【问题讨论】:

    标签: python vega-lite altair


    【解决方案1】:

    执行此操作的方法是使用聚合转换,尽管它有点棘手,因为您需要确保在计算聚合之前正确分组数据。以下是如何使用聚合转换而不是编码中的聚合来重现图表:

    alt.Chart(data).transform_timeunit(
        Month='yearmonth(timestamp)'
    ).transform_aggregate(
        Metric='sum(weight)',
        groupby=['fruit', 'Month']
    ).mark_bar().encode(
        x='yearmonth(Month):O',  # use yearmonth to control axis format
        y='Metric:Q',
        color='fruit:Q',
        tooltip=['yearmonth(Month):O', 'Metric:Q', 'fruit:Q']
    )
    

    完成此操作后,您可以使用类似的策略(密切跟踪 groupby)在每个条形上方显示总数:

    base = alt.Chart(data).transform_timeunit(
        Month='yearmonth(timestamp)'
    ).encode(
        x='yearmonth(Month):O'
    )
    
    labels = base.transform_aggregate(
        Total='sum(weight)',
        groupby=['Month']
    ).mark_text().encode(
        y='Total:Q',
        text='Total:Q'
    )
    
    bars = base.transform_aggregate(
        Metric='sum(weight)',
        groupby=['fruit', 'Month']
    ).mark_bar().encode(
        y='Metric:Q',
        color='fruit:Q',
        tooltip=['Month:O', 'Metric:Q', 'fruit:Q']
    )
    
    alt.layer(bars, labels, width=1400)
    

    【讨论】:

    • 感谢您展示分层方法——非常有帮助!我将如何让条形图工具提示显示每月总计?考虑到条形的聚合水平与给定月份中每种水果的重量相加的水平不同,是否有可能?
    • 我可能会通过在拆分条上分层透明条来做到这一点,并将工具提示附加到透明条上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2015-08-11
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多