使用Altair的Facet功能时去除甘特图中的空白行
问题描述
使用Altair的alt.Facet按group列分组生成甘特图后,group1子图中出现了任务4和5的空白行,希望仅保留有内容的行。
原代码如下:
import altair as alt import pandas as pd source = pd.DataFrame([ {"task": 1, "start": 1, "end": 3, "group": 1}, {"task": 2, "start": 3, "end": 8, "group": 1}, {"task": 3, "start": 8, "end": 10, "group": 1}, {"task": 1, "start": 1, "end": 3, "group": 2}, {"task": 2, "start": 3, "end": 8, "group": 2}, {"task": 3, "start": 8, "end": 10, "group": 2}, {"task": 4, "start": 10, "end": 13, "group": 2}, {"task": 5, "start": 13, "end": 14, "group": 2}, ]) chart = alt.Chart(source).mark_bar().encode( x=alt.X('start', type="quantitative"), x2=alt.X2('end'), y=alt.Y('task', type="ordinal"), facet=alt.Facet("group", type="nominal", columns=1) )
解决方法
问题根源是默认分面配置会共享y轴刻度,导致group1子图显示所有任务的行。只需在图表配置中添加resolve_scale(y='independent'),让每个分面的y轴独立计算,就能只显示当前分组存在的任务:
修改后的代码:
import altair as alt import pandas as pd source = pd.DataFrame([ {"task": 1, "start": 1, "end": 3, "group": 1}, {"task": 2, "start": 3, "end": 8, "group": 1}, {"task": 3, "start": 8, "end": 10, "group": 1}, {"task": 1, "start": 1, "end": 3, "group": 2}, {"task": 2, "start": 3, "end": 8, "group": 2}, {"task": 3, "start": 8, "end": 10, "group": 2}, {"task": 4, "start": 10, "end": 13, "group": 2}, {"task": 5, "start": 13, "end": 14, "group": 2}, ]) chart = alt.Chart(source).mark_bar().encode( x=alt.X('start', type="quantitative"), x2=alt.X2('end'), y=alt.Y('task', type="ordinal"), facet=alt.Facet("group", type="nominal", columns=1) ).resolve_scale(y='independent') # 添加此行实现独立y轴
修改完成后,group1子图只会显示任务1、2、3的行,不再出现任务4、5的空白行。
内容的提问来源于stack exchange,提问作者Pavlo
相关产品推荐
相关产品推荐

