0

几天以来,我一直在探索 Altair 以创建交互式图表。我正在尝试创建一个包含两层的图表,两者都显示随着时间的推移累积的股票收益。刷过一个图表应该在另一个图表中提供放大视图,累积回报从 0 开始实时更新。

在 pandas 中,您可以在可见时间段内按如下方式计算:

(1 + ret).cumprod() - 1

我不知道如何以及是否可以用 altair 做到这一点。

我已经看到有两种可能的转换:

  1. 在编码通道内
  2. 使用顶级转换(例如,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 规范

4

1 回答 1

1

https://vega.github.io/vega-lite/docs/window.html#cumulative-frequency-distribution 对于执行累积操作很有用。

Vega 还没有“乘积”运算,但我认为您可以使用它calculate来导出对数值、求累积和并应用指数——这应该相当于累积乘积。

如果您认为应该包含“产品” ,请随时在Vega存储库中提出问题。

于 2018-12-31T12:30:15.530 回答