有没有办法在 Altair 中 select 或突出显示最后或第一个 "n" 数据点?
Is there a way to select or highlight last or first "n" data points in Altair?
我最近发现想要的一件事是能够突出显示或 select Altair 中最后的 n
数据点。例如,对于每天更新的时间序列数据,selecting/highlighting 最近 7 天的数据 window.
condition
的问题是您必须明确指定 日期 或一个值,selection/highlight 就是从中发生的。这样做的一个缺点是,在时间序列数据更新相当频繁的情况下,它变成了一项手动任务。
一个可能的解决方案是只使用原生 Python 并且如果 x 轴是 datetime 数据,那么以编程方式处理代码可能使用 f-strings 的东西。
我想知道,尽管有上述两种解决方案,但是否有一种方法原生内置到 Altair/Vega-Lite 到 select last/first n
数据点?
一个使用 f-strings 的人为例子 -
index = 7 #a perhaps bad way to highlight last 2 data points
data = pd.DataFrame({'time':[0,1,2,3,4,5,6,7,8,9], 'value':[1,2,4,8,16,15,14,13,12,11]})
bar = alt.Chart(data).mark_bar(opacity=1, width=15).encode(
x='time:T',
y='value:Q',
color = alt.condition(alt.datum.time>f'{index}', alt.value('red'), alt.value('steelblue'))
)
text = bar.mark_text(align='center', dy=-10).encode(
text='value:Q'
)
bar+text
您可以使用 window 转换来执行此操作,方法类似于 Top-K Items 示例:
import altair as alt
import pandas as pd
data = pd.DataFrame({'time':[0,1,2,3,4,5,6,7,8,9], 'value':[1,2,4,8,16,15,14,13,12,11]})
num_items = 2
base = alt.Chart(data).transform_window(
rank='rank()',
sort=[alt.SortField('time', order='descending')]
)
bar = base.mark_bar(opacity=1, width=15).encode(
x='time:T',
y='value:Q',
color = alt.condition(alt.datum.rank<=num_items, alt.value('red'), alt.value('steelblue'))
)
text = bar.mark_text(align='center', dy=-10).encode(
text='value:Q'
)
bar+text
我最近发现想要的一件事是能够突出显示或 select Altair 中最后的 n
数据点。例如,对于每天更新的时间序列数据,selecting/highlighting 最近 7 天的数据 window.
condition
的问题是您必须明确指定 日期 或一个值,selection/highlight 就是从中发生的。这样做的一个缺点是,在时间序列数据更新相当频繁的情况下,它变成了一项手动任务。
一个可能的解决方案是只使用原生 Python 并且如果 x 轴是 datetime 数据,那么以编程方式处理代码可能使用 f-strings 的东西。
我想知道,尽管有上述两种解决方案,但是否有一种方法原生内置到 Altair/Vega-Lite 到 select last/first n
数据点?
一个使用 f-strings 的人为例子 -
index = 7 #a perhaps bad way to highlight last 2 data points
data = pd.DataFrame({'time':[0,1,2,3,4,5,6,7,8,9], 'value':[1,2,4,8,16,15,14,13,12,11]})
bar = alt.Chart(data).mark_bar(opacity=1, width=15).encode(
x='time:T',
y='value:Q',
color = alt.condition(alt.datum.time>f'{index}', alt.value('red'), alt.value('steelblue'))
)
text = bar.mark_text(align='center', dy=-10).encode(
text='value:Q'
)
bar+text
您可以使用 window 转换来执行此操作,方法类似于 Top-K Items 示例:
import altair as alt
import pandas as pd
data = pd.DataFrame({'time':[0,1,2,3,4,5,6,7,8,9], 'value':[1,2,4,8,16,15,14,13,12,11]})
num_items = 2
base = alt.Chart(data).transform_window(
rank='rank()',
sort=[alt.SortField('time', order='descending')]
)
bar = base.mark_bar(opacity=1, width=15).encode(
x='time:T',
y='value:Q',
color = alt.condition(alt.datum.rank<=num_items, alt.value('red'), alt.value('steelblue'))
)
text = bar.mark_text(align='center', dy=-10).encode(
text='value:Q'
)
bar+text