Не работает альтернативное условие для отсутствующих значений хороплет N.A

Я рисую хороплет, в котором я использую цветовую схему «синий». Я хочу использовать цвет по умолчанию для округов, где у меня нет данных, т.е. NA.
Цвет по умолчанию имеет шестнадцатеричный код: # dbe9f6
Я использую для этого условие alt, но оно не работает.

Вот мой код:

from altair import Scale,Color

fg = alt.Chart(us_counties).mark_geoshape(
stroke='black',
strokeWidth=0.05
).project(
    type='albersUsa'
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(fdf1, 'fips', ['Pill_per_pop'])
).encode(
    color = alt.condition('datum.Pill_per_pop!==null',Color('Pill_per_pop:Q',scale=Scale(scheme='blues')),alt.value('#dbe9f6'))
).properties(
    width=700,
    height=400
)

Мой вывод:  Сгенерированный результат

Ожидаемый результат:  Ожидаемый результат


person sdasara    schedule 07.12.2019    source источник


Ответы (1)


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

alt.Chart(us_counties).mark_geoshape(
    stroke='black',
    strokeWidth=0.05
).project(
    type='albersUsa'
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(fdf1, 'fips', ['Pill_per_pop'])
).transform_calculate(
    Pill_per_pop='isValid(datum.Pill_per_pop) ? datum.Pill_per_pop : -1'  
).encode(
    color = alt.condition(
        'datum.Pill_per_pop > 0',
        alt.Color('Pill_per_pop:Q', scale=Scale(scheme='blues')),
        alt.value('#dbe9f6')
    )
).properties(
    width=700,
    height=400
)
person jakevdp    schedule 07.12.2019
comment
Это не по теме, но ваша помощь будет очень признательна по этому моему вопросу: stackoverflow.com/questions/59224026/ - person sdasara; 07.12.2019