Работа с отсутствующими значениями / нулями на карте Альтаира - PullRequest
0 голосов
/ 18 марта 2019

Я создал картографию в Альтаире с данными на уровне штатов США. Однако у меня нет данных по некоторым штатам. По умолчанию эти состояния вообще не отображаются на карте. Вот пример изображения:

enter image description here

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

enter image description here

Мой вопрос заключается в том, как сделать так, чтобы состояния с нулями на 1-й карте выглядели как состояния на 2-й карте. Я попробовал несколько вещей. Вот мой код для исходной карты:

states = alt.topo_feature(data.us_10m.url, 'states')
source = df

alt.Chart(states).mark_geoshape().encode(
    color=alt.Color('avg_prem:Q')
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(source, 'id', ['avg'])
).project(
    type='albersUsa'
).properties(
    width=700,
    height=450
) 

Вот код для 2-ой карты:

# US states background
alt.Chart(states).mark_geoshape(
    fill='lightgray',
    stroke='white'
).properties(
    title='US State Capitols',
    width=700,
    height=400
).project('albersUsa')

Главное, что я пытался применить параметры заполнения и обводки со 2-й карты на 1-й карте:

alt.Chart(states).mark_geoshape(fill='lightgray',
    stroke='white').encode(
    color=alt.Color('avg_prem:Q')
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(source, 'id', ['avg'])
).project(
    type='albersUsa'
).properties(
    width=700,
    height=450
) 

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

Есть ли хороший способ исправить проблему с отсутствующими данными на карте?

1 Ответ

2 голосов
/ 19 марта 2019

Один из подходов - использовать многоуровневую диаграмму с нужным фоном. Вы не предоставили свои данные, поэтому я не могу их на самом деле попробовать, но это может выглядеть примерно так:

states = alt.topo_feature(data.us_10m.url, 'states')
source = df

foreground = alt.Chart(states).mark_geoshape().encode(
    color=alt.Color('avg_prem:Q')
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(source, 'id', ['avg'])
).project(
    type='albersUsa'
).properties(
    width=700,
    height=400
)  

background = alt.Chart(states).mark_geoshape(
    fill='lightgray',
    stroke='white'
).properties(
    title='US State Capitols',
    width=700,
    height=400
).project('albersUsa')

background + foreground

Редактировать: Другой возможный подход заключается в использовании условного кодирования, аналогичного https://vega.github.io/vega-lite/examples/point_invalid_color.html:

alt.Chart(states).mark_geoshape().encode(
    color=alt.condition('datum.avg_prem !== null', 'avg_prem:Q', alt.value('lightgray'))
).transform_lookup(
    lookup='id',
    from_=alt.LookupData(source, 'id', ['avg'])
).project(
    type='albersUsa'
).properties(
    width=700,
    height=400
)  
...