Независимый расчет цветовой карты Altair для каждой строки - PullRequest
1 голос
/ 29 мая 2020

Я пытаюсь построить тепловую карту с помощью altair. Идея состоит в том, что цветовое отображение применяется независимо к каждой из строк, а не ко всем наблюдениям. К сожалению, это то, что я получил до сих пор.

enter image description here

Как вы можете видеть на графике, вы можете видеть изменения только в одной строке, потому что это тот, у которого больше случаев. Однако идея состоит в том, чтобы применить сопоставление для каждой строки, а не для всех вместе.

Это код, который у меня есть до сих пор:

data = pd.read_csv(
    "https://raw.githubusercontent.com/jlcoto/covid-peru-data/master"
    "/data/limpia/data_limpia_datos_siscovid_2020_05_26.csv",
    parse_dates=["fecha_resultado"],
    dtype={"ubigeo": "string"},
)

evol_departamento = (
    data.groupby(
        ["departamento", pd.Grouper(key="fecha_resultado", freq="D")]
    )[["uuid"]]
    .count()
    .rename(columns={"uuid": "num_casos"})
    .reset_index()
)

alt.Chart(evol_departamento).mark_rect().encode(
    x="monthdate(fecha_resultado)",
    y="departamento:O",
    color=alt.Color("num_casos:Q"),
).resolve_scale(color="independent",)

Я видел это ответ об использовании resolve_scale, однако, похоже, это не помогает.

Ответы [ 2 ]

2 голосов
/ 29 мая 2020

Функциональность resolve применяется только к многопанельным диаграммам (фасет, объединение, повторение, слой и т. Д. c.) Чтобы настроить цветовую шкалу в кодировке для одной диаграммы, лучше всего использовать altair преобразует для вычисления нормализованной версии ваших данных.

Вот пример для вашего набора данных:

alt.Chart(evol_departamento).transform_joinaggregate(
    max_casos='max(num_casos)',
    groupby=['departamento']
).transform_calculate(
    num_casos_norm='datum.num_casos / datum.max_casos'
).mark_rect().encode(
    x="monthdate(fecha_resultado)",
    y="departamento:O",
    color=alt.Color("num_casos_norm:Q"),
)

enter image description here

0 голосов
/ 29 мая 2020

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

chart2 = alt.Chart(evol_departamento).mark_rect().encode(
    x="monthdate(fecha_resultado)",
    color=alt.Color("departamento:N", legend=None),
    opacity = alt.Opacity("num_casos:Q", legend=None)
).properties(
    width=800, height=12
).facet(row='departamento:N'
).configure_facet(
    spacing= 0
).configure_view(
    stroke=None
).resolve_scale(
    opacity='independent'
)

chart2

Я не сразу понял, как вращать метки с помощью labelAngle.

диаграмма

...