Отображать значение в виде текста только для полосы с максимальной высотой в altair - PullRequest
1 голос
/ 16 июня 2020

Я не могу выполнить эту, казалось бы, простую задачу отображения значения только максимальной полосы над самой полосой - например, аннотировать максимальную полосу.

Для кода ниже я хотел бы увидеть текст только над полосой со значением 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

Я пробовал использовать некоторые преобразования и использовать argmax и max, но пока ничего не работает. Либо все они отображают значение, либо все Null.

1 Ответ

1 голос
/ 17 июня 2020

Вы можете сделать это, используя агрегат argmax в кодировках x и y:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...