带日期的双轴上的线的 altair 条形图
altair bar chart with Line on Dual Axis with dates
我按照 official docs 在独立轴上创建了一个条形图和一个折线图,日期在 X 轴上。
这是代码片段
df = pd.DataFrame({
'reportday': ['2021-11-08', '2021-11-09', '2021-11-10', '2021-11-11','2021-11-12', '2021-11-15','2021-11-16', '2021-11-17', '2021-11-18','2021-11-19'],
'price': [328.0, 310.0, 301.0, 3330.0, 3278.0, 3200.0, 2189.0, 1701.0, 1698.0, 1703.0],
'production': [24.75, 16.30, 14.77, 14.10, 27.70, 26.70, 29.05, 19.58, 24.88, 17.35]
})
df['reportday'] = pd.to_datetime(df['reportday'])
base = alt.Chart(df).encode(x=alt.X('reportday:T', axis=alt.Axis(labelAngle=325)))
line = base.mark_line(color='red').encode(y=alt.Y('price:Q', axis=alt.Axis(grid=True)))
bar = base.mark_bar().encode(y='production:Q')
c = (line + bar).resolve_scale(y='independent').properties(width=600)
输出:
我尝试调整宽度,但最后一个 x 轴标签(上例中的 Fri 19)仍然被截断。有什么避免这种情况的提示吗?
您还可以看到,图表中绘制了两个日期(星期六 13 日和星期日 14 日),即使数据框没有这样的值(周末没有数据)。这在图表中留下了很大的差距,尤其是当几个月有更多的行时。如何防止这些日期显示在图表中?
你的示例代码实际上为我显示了 19 日星期五,但你可以更明确地通过 scale=alt.Scale(domain=['2021-11-08', '2021-11-20'])))
或使用 scale=alt.Scale(nice=True)
.
设置域
我不确定时间轴是否存在间隙,因为它们本质上是连续的。听起来序数轴可能更适合您?
base = alt.Chart(df).encode(x=alt.X('monthdate(reportday):O', axis=alt.Axis(labelAngle=325)))
line = base.mark_line(color='red').encode(y=alt.Y('price:Q', axis=alt.Axis(grid=True)))
bar = base.mark_bar().encode(y='production:Q')
(bar + line).resolve_scale(y='independent').properties(width=600)
要解决 VL 中的时区错误(请参阅评论),您可以使用 pandas 来格式化日期:
df['reportday'] = pd.to_datetime(df['reportday']).dt.strftime('%b %d')
base = alt.Chart(df).encode(x=alt.X('reportday:O', axis=alt.Axis(labelAngle=325)))
我按照 official docs 在独立轴上创建了一个条形图和一个折线图,日期在 X 轴上。
这是代码片段
df = pd.DataFrame({
'reportday': ['2021-11-08', '2021-11-09', '2021-11-10', '2021-11-11','2021-11-12', '2021-11-15','2021-11-16', '2021-11-17', '2021-11-18','2021-11-19'],
'price': [328.0, 310.0, 301.0, 3330.0, 3278.0, 3200.0, 2189.0, 1701.0, 1698.0, 1703.0],
'production': [24.75, 16.30, 14.77, 14.10, 27.70, 26.70, 29.05, 19.58, 24.88, 17.35]
})
df['reportday'] = pd.to_datetime(df['reportday'])
base = alt.Chart(df).encode(x=alt.X('reportday:T', axis=alt.Axis(labelAngle=325)))
line = base.mark_line(color='red').encode(y=alt.Y('price:Q', axis=alt.Axis(grid=True)))
bar = base.mark_bar().encode(y='production:Q')
c = (line + bar).resolve_scale(y='independent').properties(width=600)
输出:
我尝试调整宽度,但最后一个 x 轴标签(上例中的 Fri 19)仍然被截断。有什么避免这种情况的提示吗?
您还可以看到,图表中绘制了两个日期(星期六 13 日和星期日 14 日),即使数据框没有这样的值(周末没有数据)。这在图表中留下了很大的差距,尤其是当几个月有更多的行时。如何防止这些日期显示在图表中?
你的示例代码实际上为我显示了 19 日星期五,但你可以更明确地通过 scale=alt.Scale(domain=['2021-11-08', '2021-11-20'])))
或使用 scale=alt.Scale(nice=True)
.
我不确定时间轴是否存在间隙,因为它们本质上是连续的。听起来序数轴可能更适合您?
base = alt.Chart(df).encode(x=alt.X('monthdate(reportday):O', axis=alt.Axis(labelAngle=325)))
line = base.mark_line(color='red').encode(y=alt.Y('price:Q', axis=alt.Axis(grid=True)))
bar = base.mark_bar().encode(y='production:Q')
(bar + line).resolve_scale(y='independent').properties(width=600)
要解决 VL 中的时区错误(请参阅评论),您可以使用 pandas 来格式化日期:
df['reportday'] = pd.to_datetime(df['reportday']).dt.strftime('%b %d')
base = alt.Chart(df).encode(x=alt.X('reportday:O', axis=alt.Axis(labelAngle=325)))