几天以来,我一直在探索 Altair 以创建交互式图表。我正在尝试创建一个包含两层的图表,两者都显示随着时间的推移累积的股票收益。刷过一个图表应该在另一个图表中提供放大视图,累积回报从 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
这是编辑器中相应的 vega-lite 规范: