如何计算 labels/tooltips 的聚合的聚合?
How do I compute aggregates of aggregates for labels/tooltips?
如果我有聚合的时间序列数据。是否可以执行额外的聚合并将其显示在工具提示中?
这是我的问题的一个更明确的例子。对于下面的代码示例,我们显示了三种不同类型水果按月汇总的权重总和。是否也可以将每个月的总重量(and/or 可能是每个月水果重量的标准化百分比)显示为标签或工具提示?
我玩过 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']
))
执行此操作的方法是使用聚合转换,尽管这有点棘手,因为您需要确保在计算聚合之前正确分组数据。以下是如何使用聚合转换而不是编码内的聚合来重现图表:
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)
如果我有聚合的时间序列数据。是否可以执行额外的聚合并将其显示在工具提示中?
这是我的问题的一个更明确的例子。对于下面的代码示例,我们显示了三种不同类型水果按月汇总的权重总和。是否也可以将每个月的总重量(and/or 可能是每个月水果重量的标准化百分比)显示为标签或工具提示?
我玩过 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']
))
执行此操作的方法是使用聚合转换,尽管这有点棘手,因为您需要确保在计算聚合之前正确分组数据。以下是如何使用聚合转换而不是编码内的聚合来重现图表:
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)