甘特图 - 打印一年中的所有星期一

Gantt Chart - Printing all the Mondays in a year

给定这样的数据集:

Task,Start,End
a,2020-03-01,2020-03-16
a,2020-04-01,2020-04-16
b,2020-03-05,2020-06-22
c,2020-06-10,2020-11-28

和这个甘特图

import pandas as pd
import altair as alt

df = pd.read_csv("/Gantt.csv")
df["Start"] = pd.to_datetime(df["Start"])
df["End"] = pd.to_datetime(df["End"])

chart = alt.Chart(df).mark_bar().encode(
    x="Start",
    x2="End",

    y=alt.Y("Task", 
            sort=list(df.sort_values(["Start"])
                                    ["Task"])), 
    color=alt.Color("Task",legend=None)
)

chart

有没有办法在 x 轴上显示 2020 年的所有星期一?

您可以使用 alt.Axis

自定义刻度值

例如:

import pandas as pd
import altair as alt

df = pd.read_csv("Gantt.csv", parse_dates=["Start", "End"])

chart = alt.Chart(df).mark_bar().encode(
    x=alt.X("Start", axis=alt.Axis(
        values=[d.isoformat() for d in pd.date_range('2020-01-06', freq='7D', periods=52)],
        format="%a %b %_d",
        tickCount=52,
        labelAngle=90)),
    x2="End",
    y=alt.Y("Task", 
            sort=list(df.sort_values(["Start"])
                                    ["Task"])), 
    color=alt.Color("Task",legend=None)
).properties(width=800)

chart.display()

请注意,Altair 时间格式来自 d3-date-format