基于Python绘制多重复任务甘特图/分段条形图需求(附DataFrame示例)
实现自动按Resource着色的大规模甘特图(Python)
看起来你是要处理重复任务的大规模甘特图需求,不想手动搞颜色字典,而且之前用ff.create_gantt没达到预期。其实用Plotly Express的timeline函数会更省心,它能直接基于你的DataFrame自动处理着色,完美适配几千行的数据集。
下面是完整的实现步骤:
1. 先处理时间格式
你的Start和Finish是纯时间字符串,Plotly需要完整的datetime类型才能正确渲染时间轴。如果任务是每日重复,你可以给时间加上基准日期(比如当天),转换成datetime对象:
import pandas as pd # 假设你的dfGant已经加载完成 dfGant['Start'] = pd.to_datetime('2024-01-01 ' + dfGant['Start']) dfGant['Finish'] = pd.to_datetime('2024-01-01 ' + dfGant['Finish'])
如果是跨多天的数据,只需要确保Start和Finish列本身包含日期信息,直接转成datetime就行。
2. 用Plotly Express绘制自动着色的甘特图
Plotly Express的timeline可以直接读取你的DataFrame,自动按Resource列分配颜色,而且不需要手动构建字典。因为你要三色图表,我们可以从Plotly的内置定性色板里选3个颜色:
import plotly.express as px # 绘制甘特图,按Resource着色,用三色序列 fig = px.timeline( dfGant, x_start="Start", x_end="Finish", y="Task", color="Resource", color_discrete_sequence=px.colors.qualitative.T10[:3] # 取前3个颜色,满足三色需求 ) # 调整Y轴顺序,保持任务在DataFrame里的原始顺序 fig.update_yaxes(categoryorder='total ascending') # 调整X轴时间显示格式,让时间更清晰 fig.update_xaxes(tickformat="%H:%M:%S") # 显示图表 fig.show()
为什么不用你原来的gantDict方法?
你的gantDict函数把每一行转成字典再存到列表里,不仅没必要,而且对于几千行的数据来说还会额外占用内存。Plotly Express直接支持DataFrame输入,一步到位,效率更高。
适配多日重复任务
如果你的数据包含多天的任务,只需要确保Start和Finish列是带日期的datetime类型,Plotly会自动调整X轴的时间范围,不需要额外配置。
这样生成的图表会自动给不同的Resource分配你指定的三色,Y轴是任务列表,X轴是时间轴,完美适配你的大规模数据需求。
内容的提问来源于stack exchange,提问作者Eric Stralsund
相关产品推荐
相关产品推荐

