如何使用 Altair 按日期时间值突出显示条形图

How to highlight a bar by datetime value with Altair

类似于:https://altair-viz.github.io/gallery/bar_chart_with_highlighted_bar.html,是否可以突出显示基于特定日期时间值的条形图?我似乎无法让它发挥作用。

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"),],
)

screen shot of output

您的表达式无效,因为您正在将时间值与字符串进行比较。您需要在进行比较之前解析日期字符串,您可以使用 Vega Expression 功能来完成此操作:

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"),],
)

请注意,在此处使用完整的 ISO 时间字符串很重要,因为 Javascript 在解析日期时使用的时区会根据日期的格式设置而变化(例如,在大多数浏览器中,"2019-03-01"被解析为 UTC 时间,而 "2019-03-01T00:00:00" 被解析为本地时间)并且非标准日期格式的解析因浏览器而异。

有关 Javascript 日期解析的更多信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse