【问题标题】:How to highlight a bar by datetime value with Altair如何使用 Altair 按日期时间值突出显示条形
【发布时间】:2020-06-05 11:13:59
【问题描述】:

类似于: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

【问题讨论】:

    标签: python data-visualization vega altair


    【解决方案1】:

    您的表达式不起作用,因为您正在将时间值与字符串进行比较。您需要在进行比较之前解析日期字符串,您可以使用 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 时间,而 @ 987654327@ 被解析为本地时间),非标准日期格式的解析因浏览器而异。

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

    【讨论】:

      猜你喜欢
      • 2020-08-18
      • 1970-01-01
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2021-07-29
      • 2021-08-30
      相关资源
      最近更新 更多