ac24
ac24

Reputation: 5565

Using condition to label selection of points based on a value

How can I label only the points where X >= 3? I don't see any points labelled with this output.

This is very similar to the simple labelled points example but I feel like I am missing something simple.


import altair as alt
import pandas as pd

source = pd.DataFrame({
    'x': [1, 3, 5, 7, 9],
    'y': [1, 3, 5, 7, 9],
    'label': ['A', 'B', 'C', 'D', 'E']
})

points = alt.Chart(source).mark_point().encode(
    x='x:Q',
    y='y:Q'
)

text = points.mark_text(
    align='left',
    baseline='middle',
    dx=7
).encode(
    text=alt.condition(alt.FieldGTEPredicate('x:Q', 3), 'label', alt.value(' '))
)

points + text

enter image description here

Upvotes: 1

Views: 269

Answers (1)

jakevdp
jakevdp

Reputation: 86433

Predicates do not recognize encoding type shorthands; you should use the field name directly:

text=alt.condition(alt.FieldGTEPredicate('x', 3), 'label', alt.value(' '))

Even better, since this is essentially a filter operation, is to use a filter transform in place of the conditional value:

import altair as alt
import pandas as pd

source = pd.DataFrame({
    'x': [1, 3, 5, 7, 9],
    'y': [1, 3, 5, 7, 9],
    'label': ['A', 'B', 'C', 'D', 'E']
})

points = alt.Chart(source).mark_point().encode(
    x='x:Q',
    y='y:Q'
)

text = points.transform_filter(
    alt.datum.x >= 3
).mark_text(
    align='left',
    baseline='middle',
    dx=7
).encode(
    text='label'
)

points + text

enter image description here

Upvotes: 1

Related Questions