本文共 3481 字,大约阅读时间需要 11 分钟。
甘特图是一种常见的项目管理工具,用于直观地展示项目任务的时间分布和进度。在项目管理中,甘特图通过将任务按时间轴排列,便于团队成员了解各个任务的时间安排和完成情况。常用的绘制工具包括matplotlib和plotly,这两种工具各有特点,适用于不同的需求。
matplotlib是一种功能强大的绘图库,尤其适合制作静态的甘特图。以下是使用matplotlib绘制甘特图的示例代码:
import matplotlib.pyplot as pltimport pandas as pdimport matplotlib.dates as mdatestasks = [ {"Task": "Task A", "Start": "2024-01-01", "End": "2024-01-05"}, {"Task": "Task B", "Start": "2024-01-02", "End": "2024-01-07"}, {"Task": "Task C", "Start": "2024-01-08", "End": "2024-01-10"},]df = pd.DataFrame(tasks)df["Start"] = pd.to_datetime(df["Start"])df["End"] = pd.to_datetime(df["End"])fig, ax = plt.subplots(figsize=(10, 6))for index, row in df.iterrows(): ax.barh(row["Task"], (row["End"] - row["Start"]).days, left=row["Start"], color="skyblue")ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))plt.title("Gantt Chart")plt.xlabel("Date")plt.ylabel("Tasks")plt.show() 如上代码所示,matplotlib通过barh函数绘制水平条形图,Start和End字段用于确定任务的时间范围。日期轴通过DateLocator和DateFormatter设置为每天一个刻度,确保时间轴清晰易读。
如果需要更复杂的甘特图,例如带有不同的颜色来区分任务,可以在tasks数据结构中添加Color字段:
tasks = [ { "Task": "Task A", "Start": "2024-01-01", "End": "2024-01-05", "Color": "skyblue" }, { "Task": "Task B", "Start": "2024-01-02", "End": "2024-01-07", "Color": "lightgreen" }, { "Task": "Task C", "Start": "2024-01-08", "End": "2024-01-10", "Color": "lightcoral" }] 修改后的代码如下:
import matplotlib.pyplot as pltimport pandas as pdimport matplotlib.dates as mdatestasks = [ { "Task": "Task A", "Start": "2024-01-01", "End": "2024-01-05", "Color": "skyblue" }, { "Task": "Task B", "Start": "2024-01-02", "End": "2024-01-07", "Color": "lightgreen" }, { "Task": "Task C", "Start": "2024-01-08", "End": "2024-01-10", "Color": "lightcoral" }]df = pd.DataFrame(tasks)df["Start"] = pd.to_datetime(df["Start"])df["End"] = pd.to_datetime(df["End"])fig, ax = plt.subplots(figsize=(10, 6))for index, row in df.iterrows(): ax.barh(row["Task"], (row["End"] - row["Start"]).days, left=row["Start"], color=row["Color"])ax.xaxis.set_major_locator(mdates.DayLocator(interval=1))ax.xaxis.set_major_formatter(mdates.DateFormatter("%Y-%m-%d"))plt.title("Gantt Chart with Different Colors")plt.xlabel("Date")plt.ylabel("Tasks")plt.show() 如果你想使用交互式的甘特图工具,plotly是一个更好的选择。plotly可以生成动态的交互式图表,适合在线展示。
以下是使用plotly绘制甘特图的示例代码:
import plotly.express as pximport pandas as pdtasks = [ { "Task": "Task A1", "Start": "2024-01-01", "Finish": "2024-01-05", "Group": "Group A" }, { "Task": "Task A2", "Start": "2024-01-06", "Finish": "2024-01-10", "Group": "Group A" }, { "Task": "Task B1", "Start": "2024-01-02", "Finish": "2024-01-07", "Group": "Group B" }, { "Task": "Task B2", "Start": "2024-01-08", "Finish": "2024-01-12", "Group": "Group B" }]df = pd.DataFrame(tasks)fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", color="Group", title="Gantt Chart with Groups")fig.update_yaxes(categoryorder="total ascending")fig.show() 如上代码所示,plotly通过px.timeline函数绘制交互式甘特图,color参数用于指定不同的组别颜色,categoryorder参数用于设置y轴的分类顺序。
通过以上代码示例,可以轻松创建出美观且功能完善的甘特图,满足不同项目管理需求。
转载地址:http://ehofk.baihongyu.com/