几天以来,我一直在探索Altair,以创建交互式图表。 我正在尝试创建一个包含两层的图表,这两层都显示一段时间内的累积股票收益。 刷完一张图表应在另一张图表中提供放大视图,并从0开始实时实时更新累积收益。
在熊猫中,您可以在可见时间段内进行如下计算:
(1 + ret).cumprod() - 1
我不知道如何以及是否可以使用Altair做到这一点。
我已经看到有两种可能的转换方式:
我过去已经成功使用过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:
答案 0 :(得分:0)
https://vega.github.io/vega-lite/docs/window.html#cumulative-frequency-distribution 对于执行累积操作很有用。
Vega尚无“乘积”运算,但是我认为您可以使用calculate
来导出对数值,求和并应用指数-这应该等同于乘积。
如果您认为应该包括“产品”,请随时在Vega存储库中提交问题。