是否可以创建与 Altair/Vega-Lite 中的选择过滤器一起使用的自定义聚合?
Is it possible to create custom aggregations that work with selection filters in Altair/Vega-Lite?
几天以来,我一直在探索 Altair,以创建交互式图表。
我正在尝试创建一个包含两层的图表,这两个层都显示随时间推移的累积库存 returns。
刷过一个图表应该在另一个图表中提供放大视图,累积 return 从 0 开始实时更新。
在 pandas 中,您可以在可见时间段内按如下方式计算:
(1 + ret).cumprod() - 1
我不知道如何以及是否可以用 altair 做到这一点。
我看到有两种可能的转换:
- 编码通道内
- 使用顶级转换(例如,transform_aggregate 和 transform_calculate)
我过去曾成功使用 1(例如创建两个图表,其中一个用作另一个的缩放选择),但我无法使 2 正常工作。
举一个具体的简单例子,我将下面的两个图表垂直拼接起来。底部的选择应显示 运行 与第一个选择的总和。
这是我目前尝试执行此操作时产生的我不完全理解的行为(从左到右刷似乎是我想要的,从右到左刷会导致向下倾斜的总和 运行 , 取消选择会产生奇怪的结果)...
import altair as alt
from vega_datasets import data
source = data.stocks().query('symbol=="GOOG"')
sel = alt.selection_interval(encodings=['x'])
c1 = alt.Chart(source).mark_line().encode(
x='date',
y='price_cum:Q'
).transform_filter(sel).transform_window(price_cum='sum(price)')
c2 = alt.Chart(source).mark_line().encode(
x='date',
y='price'
).properties(height=100).add_selection(sel)
c1&c2
这里是编辑器中的corresponding vega-lite spec:
https://vega.github.io/vega-lite/docs/window.html#cumulative-frequency-distribution
对于执行累积操作很有用。
Vega 还没有 "product" 运算符,但我认为您可以使用 calculate
来导出对数值,进行累加和并应用指数——这应该等同于累积产品。
如果您认为应该包含 "product",请随时在 Vega 存储库中提出问题。
几天以来,我一直在探索 Altair,以创建交互式图表。 我正在尝试创建一个包含两层的图表,这两个层都显示随时间推移的累积库存 returns。 刷过一个图表应该在另一个图表中提供放大视图,累积 return 从 0 开始实时更新。
在 pandas 中,您可以在可见时间段内按如下方式计算:
(1 + ret).cumprod() - 1
我不知道如何以及是否可以用 altair 做到这一点。
我看到有两种可能的转换:
- 编码通道内
- 使用顶级转换(例如,transform_aggregate 和 transform_calculate)
我过去曾成功使用 1(例如创建两个图表,其中一个用作另一个的缩放选择),但我无法使 2 正常工作。
举一个具体的简单例子,我将下面的两个图表垂直拼接起来。底部的选择应显示 运行 与第一个选择的总和。
这是我目前尝试执行此操作时产生的我不完全理解的行为(从左到右刷似乎是我想要的,从右到左刷会导致向下倾斜的总和 运行 , 取消选择会产生奇怪的结果)...
import altair as alt
from vega_datasets import data
source = data.stocks().query('symbol=="GOOG"')
sel = alt.selection_interval(encodings=['x'])
c1 = alt.Chart(source).mark_line().encode(
x='date',
y='price_cum:Q'
).transform_filter(sel).transform_window(price_cum='sum(price)')
c2 = alt.Chart(source).mark_line().encode(
x='date',
y='price'
).properties(height=100).add_selection(sel)
c1&c2
这里是编辑器中的corresponding vega-lite spec:
https://vega.github.io/vega-lite/docs/window.html#cumulative-frequency-distribution 对于执行累积操作很有用。
Vega 还没有 "product" 运算符,但我认为您可以使用 calculate
来导出对数值,进行累加和并应用指数——这应该等同于累积产品。
如果您认为应该包含 "product",请随时在 Vega 存储库中提出问题。