创建在 X 轴上按周分组日期的 Altair 图表
Create Altair chart with grouped dates by week in X axis
DATE,AMOUNT
2022-04-05,100
2022-04-06,10
2022-04-07,90
2022-04-08,75
2022-04-12,32
2022-04-13,400
2022-04-14,28
2022-04-15,50
对于这样的数据集,我如何创建按周分组的条形图,以便 X 轴仅显示两个条形,april 03 - april 09
和 april 11 - april 17
? (考虑到一周从星期日开始,即使 april 04
这样的日期也没有数据)
您可以使用 time units in VegaLite 对观察结果进行分组。 week()
将 return 周数,但我不确定是否有一种方法可以按照您想要的方式格式化标签,而无需像我在下面所做的那样通过 labelExpr
手动操作。
import pandas as pd
import altair as alt
df = pd.read_clipboard(sep=',')
alt.Chart(df).mark_bar().encode(
x='AMOUNT',
y=alt.Y(
'week(DATE):O', axis=alt.Axis(
labelExpr="datum.label == 'W14' ? 'Apr 04 - Apr 10' : 'Apr 11 - Apr 17'")
)
)
你也可以先通过pandas计算标签,比上面的更自动:
df['DATE'] = pd.to_datetime(df['DATE'])
df_by_week = df.resample('W', on ='DATE').sum().reset_index()
df_by_week['date_label'] = df_by_week['DATE'].apply(
lambda x: f'{(x - pd.Timedelta(days=6)).strftime("%b %d")} - {x.strftime("%B %d")}'
)
alt.Chart(df_by_week).mark_bar().encode(
x='AMOUNT',
y='date_label'
)
DATE,AMOUNT
2022-04-05,100
2022-04-06,10
2022-04-07,90
2022-04-08,75
2022-04-12,32
2022-04-13,400
2022-04-14,28
2022-04-15,50
对于这样的数据集,我如何创建按周分组的条形图,以便 X 轴仅显示两个条形,april 03 - april 09
和 april 11 - april 17
? (考虑到一周从星期日开始,即使 april 04
这样的日期也没有数据)
您可以使用 time units in VegaLite 对观察结果进行分组。 week()
将 return 周数,但我不确定是否有一种方法可以按照您想要的方式格式化标签,而无需像我在下面所做的那样通过 labelExpr
手动操作。
import pandas as pd
import altair as alt
df = pd.read_clipboard(sep=',')
alt.Chart(df).mark_bar().encode(
x='AMOUNT',
y=alt.Y(
'week(DATE):O', axis=alt.Axis(
labelExpr="datum.label == 'W14' ? 'Apr 04 - Apr 10' : 'Apr 11 - Apr 17'")
)
)
你也可以先通过pandas计算标签,比上面的更自动:
df['DATE'] = pd.to_datetime(df['DATE'])
df_by_week = df.resample('W', on ='DATE').sum().reset_index()
df_by_week['date_label'] = df_by_week['DATE'].apply(
lambda x: f'{(x - pd.Timedelta(days=6)).strftime("%b %d")} - {x.strftime("%B %d")}'
)
alt.Chart(df_by_week).mark_bar().encode(
x='AMOUNT',
y='date_label'
)