我最近发现想要做的一件事是能够突出显示或选择n
Altair中的最后一个数据点。例如,对于每日更新的时间序列数据,请选择/突出显示最近7天的数据窗口。
问题condition
在于您必须明确指定选择或突出显示的日期或值。这样做的一个缺点是,在时间序列数据更新频繁的情况下,它成为手动任务。
一种可能的解决方案是仅使用本机Python,并且如果x轴是日期时间数据,则以这样的方式编写代码,使其以编程方式处理可能使用f字符串的内容。
我想知道,尽管有以上两种解决方案,Altair / Vega-Lite本身是否内置一种方法来选择最后/第一个n
数据点?
一个使用f字符串的人为例子-
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
您可以使用窗口变换来执行此操作,类似于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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句