如何使用 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。
类似于: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。