Как выделить бар по значению даты и времени с помощью Altair - PullRequest
1 голос
/ 21 февраля 2020

Аналогично: https://altair-viz.github.io/gallery/bar_chart_with_highlighted_bar.html, возможно ли выделить бар на основе заданного значения c даты и времени? Я не могу заставить его работать.

import pandas as pd
import altair as alt
import datetime

df = pd.DataFrame(
    {
        "year": [2019, 2019, 2019],
        "month": [1, 3, 7],
        "day": [1, 1, 1],
        "value": [5, 7, 9],
    }
)


df["Mth"] = pd.to_datetime(dict(year=df["year"], month=df["month"], day=df["day"]))
df.drop(
    ["year", "month", "day"], axis=1, inplace=True
)  # columns not present in my actual data set


alt.Chart(df).mark_bar(size=30).encode(
    x="Mth",
    y="value",
    color=alt.condition(
        alt.datum.Mth == "2019-03-01", alt.value("orange"), alt.value("steelblue")
    ),
    tooltip=[alt.Tooltip("value", title="value"), alt.Tooltip("Mth", title="Month"),],
)

снимок экрана с выводом

1 Ответ

1 голос
/ 21 февраля 2020

Ваше выражение не работает, потому что вы сравниваете временное значение со строкой. Вам нужно проанализировать строку даты перед выполнением сравнения, что можно сделать с помощью функциональности Выражение Vega :

alt.Chart(df).mark_bar(size=30).encode(
    x="Mth",
    y="value",
    color=alt.condition(
        alt.datum.Mth == alt.expr.toDate('2019-03-01T00:00:00'),
        alt.value("orange"), alt.value("steelblue")
    ),
    tooltip=[alt.Tooltip("value", title="value"), alt.Tooltip("Mth", title="Month"),],
)

enter image description here

Обратите внимание, что здесь важно использовать полную строку времени ISO, поскольку часовой пояс, используемый Javascript при разборе дат, изменяется в зависимости от того, как отформатирована дата (например, в большинстве браузеров "2019-03-01" анализируется как UT C время, в то время как "2019-03-01T00:00:00" анализируется как местное время) и разбор нестандартных форматов даты варьируется от браузера к браузеру.

Более подробную информацию о Javascript можно найти в разделе https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse.

...