我想将范围滑块与日期时间值绑定,以仅过滤图表中特定日期的数据。使用stocks数据,我想要做的是让 x 轴显示公司,y 轴显示用户通过范围滑块选择的特定日期的股票价格。
根据来自的输入这个答案 https://stackoverflow.com/questions/62046930/altair-adding-date-slider-for-interactive-scatter-chart-pot和这个issue https://github.com/altair-viz/altair/issues/2008我有下面的代码显示了一些东西
当滑块在一个特定值之后移动时(不等式条件为transform_filter
),但其余部分为空。
奇怪的是,如果我有不等式运算符,那么至少它会显示一些东西,但是当它的时候一切都是空的==
.
import altair as alt
from vega_datasets import data
source = data.stocks()
def timestamp(t):
return pd.to_datetime(t).timestamp()
slider = alt.binding_range(step=86400, min=timestamp(min(source['date'])), max=timestamp(max(source['date']))) #86400 is the difference b/w consequetive days
select_date = alt.selection_single(fields=['date'], bind=slider, init={'date': timestamp(min(source['date']))})
alt.Chart(source).mark_bar().encode(
x='symbol',
y='price',
).add_selection(select_date).transform_filter(alt.datum.date == select_date.date)
由于输出为空,我倾向于得出结论:transform_filter
这引起了问题,但我已经花了 6 个多小时了,并尝试了使用的所有排列和组合alt.expr.toDate
以及到处的其他转换,但我无法让它工作。
也刚刚尝试过transform_filter(select_date.date)
and transform_filter(date)
和其他东西一起但没有什么效果。
The 预期产出就是说,当用户拖动滑块时,条形高度会发生变化(由于数据按日期过滤).
任何帮助将非常感激。
这里有几个问题:
- 在 Vega-Lite 中,时间戳以毫秒表示,而不是秒
- 您正在过滤数字时间戳和日期的字符串表示形式之间的相等性。
- 即使您解析过滤器表达式中的日期,Python 日期解析和 Javascript 日期解析的行为也不同,结果通常不会匹配。即使在 javascript 中,日期解析行为也可能因浏览器而异;所有这些意味着对 Python 和 Javascript 时间戳的相等性进行过滤通常是有问题的
- 您使用的数据具有每月时间戳,因此滑块步骤应考虑到这一点
记住所有这些,最好的做法可能是调整滑块值并根据匹配的年份和月份进行过滤,而不是尝试在确切的时间戳中实现相等。结果如下:
import altair as alt
from vega_datasets import data
import pandas as pd
source = data.stocks()
def timestamp(t):
return pd.to_datetime(t).timestamp() * 1000
slider = alt.binding_range(
step=30 * 24 * 60 * 60 * 1000, # 30 days in milliseconds
min=timestamp(min(source['date'])),
max=timestamp(max(source['date'])))
select_date = alt.selection_single(
fields=['date'],
bind=slider,
init={'date': timestamp(min(source['date']))},
name='slider')
alt.Chart(source).mark_bar().encode(
x='symbol',
y='price',
).add_selection(select_date).transform_filter(
"(year(datum.date) == year(slider.date[0])) && "
"(month(datum.date) == month(slider.date[0]))"
)
您可以在此处查看结果:维加编辑器 https://vega.github.io/editor/#/url/vega-lite/N4IgJghgLhIFygK4CcA29zQgegM5QHsBjAa1wDojcA3EAXwBoQBbCZEjAIzZCYFMAdkQJgAlgIDm8UAA9pIKAE8ADnwwCCzcRHRMAZqL6owGXIuacC6RiEXylqjAEdEEAVFEwP1NfsPGMZWRRIjU6G1wjPiIPAgF5XFRRMD5kexU1OBBccQlUXxADIzBceABtTCg1AF0mTnETBBBxZUQoDGQ3CQLWOTgARgAmADYAdgAWAAZ+4cm5uaYteLgATnGVwdHhgA55heyq5XhBgFYNvbmbcU95SCr4NY2t3b3wmyhOgVw9AmRmctABlQVTSWQAFIo+GwwXdEMxyHc+ABKAAEAF40SjIdDEslUgjoHwypNqkjUQAyckosHMOJQAAWMOgcIJVVRGJRtPcjNxKWQrKJJLJ9GqdCAA.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)