以文本形式显示值,仅显示高度中最大高度的条

时间:2020-06-16 19:17:50

标签: python-3.x data-visualization altair vega-lite

我无法完成看似简单的任务,即仅在条形图本身上显示最大条形图的值-就像注释最大条形图一样。

对于下面的代码,我只想在值为16的条上看到文本。

data = pd.DataFrame({'time':[0,1,2,3,4,5,6,7,8,9], 'value':[1,2,4,8,16,11,9,7,5,3]})

bar = alt.Chart(data).mark_bar(opacity=1, width=15).encode(
    x='time:T',
    y='value:Q',
    color = alt.condition(alt.datum.time>7, alt.value('red'), alt.value('steelblue')) #hackey way to highlight last 'n' bars 
)

text = bar.mark_text(align='center', dy=-10).encode(
    text='value:Q'
)

bar+text

我尝试使用一些转换并使用argmaxmax,但到目前为止似乎没有任何效果。它们要么全部显示值,要么全部为Null

1 个答案:

答案 0 :(得分:1)

您可以使用x和y编码中的argmax聚合来完成此操作:

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,11,9,7,5,3]})

bar = alt.Chart(data).mark_bar(opacity=1, width=15).encode(
    x='time:T',
    y='value:Q',
    color = alt.condition(alt.datum.time>7, alt.value('red'), alt.value('steelblue')) #hackey way to highlight last 'n' bars 
)

text = bar.mark_text(align='center', dy=-10).encode(
    x=alt.X('time:T', aggregate={"argmax": "value"}),
    y=alt.Y('value:Q', aggregate={"argmax": "value"}),
    text='max(value):Q'
)

bar+text

enter image description here