python制作甘特图的基本知识(附Demo)

前言

甘特图是一种常见的项目管理工具,用于表示项目任务的时间进度

直观地看到项目的各个任务在时间上的分布和进度

常用的绘制甘特图的工具是 matplotlib 和 plotly

主要以Demo的形式展示

1. matplotlib

功能强大的绘图库,适合制作静态的甘特图

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates

# 创建数据
tasks = [
    {"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"},
]

# 将数据转换为 DataFrame
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()

截图如下:

在这里插入图片描述

带有不同颜色的甘特图

import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.dates as mdates

# 创建数据
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"},
]

# 将数据转换为 DataFrame
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()

截图如下:

在这里插入图片描述

2. plotly

交互式绘图库,适合制作动态甘特图

import plotly.express as px
import pandas as pd

# 创建数据
tasks = [
    {"Task": "Task A", "Start": "2024-01-01", "Finish": "2024-01-05"},
    {"Task": "Task B", "Start": "2024-01-02", "Finish": "2024-01-07"},
    {"Task": "Task C", "Start": "2024-01-08", "Finish": "2024-01-10"},
]

# 将数据转换为 DataFrame
df = pd.DataFrame(tasks)

# 使用 plotly 绘制甘特图
fig = px.timeline(df, x_start="Start", x_end="Finish", y="Task", title="Gantt Chart")
fig.update_yaxes(categoryorder="total ascending")

# 显示图形
fig.show()

截图如下:

在这里插入图片描述

带有任务分组的甘特图

import plotly.express as px
import pandas as pd

# 创建数据
tasks = [
    {"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"},
]

# 将数据转换为 DataFrame
df = pd.DataFrame(tasks)

# 使用 plotly 绘制甘特图
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()

截图如下:

在这里插入图片描述

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 甘特图是一种项目管理工具,通过时间轴的方式展示项目任务与进度,帮助团队成员清晰了解项目进展情况。Python可以通过使用各种库和框架来制作甘特图。 在Python中,可以使用matplotlib库来绘制甘特图。matplotlib是一个功能强大的绘图库,可以用于生成各种类型的图表,包括甘特图。 首先,需要安装matplotlib库。可以使用pip命令在命令行中安装:pip install matplotlib。 然后,导入matplotlib库,并创建一个图表对象。可以使用subplot()函数来创建一个绘图区域,并设置其大小。 接下来,可以使用barh()函数绘制甘特图的条形图。barh函数可以绘制水平条形图,每个条形代表一个任务。通过设置条形的位置、高度和宽度来表示任务的起始时间、持续时间和任务名称。 通过设置坐标轴的标签和刻度,可以在甘特图上显示时间轴和任务名称。 最后,使用show()函数显示绘制的甘特图。 总结起来,制作甘特图的主要步骤如下: 1. 安装matplotlib库。 2. 导入matplotlib库,并创建图表对象。 3. 使用barh()函数绘制甘特图的条形图。 4. 设置坐标轴的标签和刻度。 5. 显示绘制的甘特图。 通过这些步骤,可以使用Python制作出具有时间轴和任务进度的甘特图。这为项目管理提供了一种清晰可视化的工具,帮助团队成员更好地理解和掌握项目进展情况。 ### 回答2: Python可以使用多种库来制作甘特图,其中最常用的是matplotlib和plotly库。下面以matplotlib为例,简要说明Python如何制作甘特图。 首先,我们需要导入matplotlib库,并创建一个绘图对象和一个子图对象: ``` import matplotlib.pyplot as plt fig, ax = plt.subplots() ``` 接下来,我们需要设置图表的大小、标题和刻度: ``` fig.set_size_inches(10, 6) # 设置图表大小 ax.set_title("甘特图") # 设置图表标题 ax.set_xlabel("时间") # 设置x轴标签 ax.set_ylabel("任务") # 设置y轴标签 ax.grid(True) # 显示网格线 ``` 然后,我们需要定义任务的起始时间、持续时间和任务名: ``` start_dates = [1, 3, 5] # 任务起始时间列表 durations = [2, 4, 3] # 任务持续时间列表 task_names = ["任务1", "任务2", "任务3"] # 任务名称列表 ``` 接下来,我们可以使用matplotlib的barh函数绘制甘特图的条形图: ``` bar_height = 0.5 # 条形图高度 for i in range(len(start_dates)): ax.barh(task_names[i], durations[i], left=start_dates[i], height=bar_height, align="center") # 绘制条形图 ``` 最后,我们可以使用matplotlib的yticks函数修改y轴刻度为任务名称,并调整图表的边界: ``` ax.set_yticks(range(len(task_names))) # 设置y轴刻度为任务名称 ax.set_yticklabels(task_names) # 设置y轴刻度标签为任务名称 ax.set_xlim(0, max(start_dates) + max(durations) + 1) # 调整x轴刻度范围 plt.tight_layout() # 调整图表布局 plt.show() # 展示图表 ``` 通过以上步骤,我们可以使用Python的matplotlib库来制作一个简单的甘特图。当然,根据需求的复杂程度,我们可以进一步使用其他功能扩展甘特图的样式和功能。 ### 回答3: Python可以使用一些第三方库来制作甘特图,其中比较常用的是Matplotlib和Plotly。 使用Matplotlib制作甘特图可以按照以下步骤进行: 1. 导入Matplotlib库:`import matplotlib.pyplot as plt` 2. 创建一张图像:`fig, ax = plt.subplots(figsize=(10, 5))` 3. 设置横轴和纵轴的范围:`ax.set_xlim(start_date, end_date)`和`ax.set_ylim(0, total_tasks)` 4. 添加任务的水平条形图:`ax.broken_barh([(start1, end1), (start2, end2), ...], (y1, y2), facecolors=('color1', 'color2', ...))` 5. 添加任务的标签:`ax.text(start_date, (y1 + y2) / 2, 'Task name')` 6. 设置横轴和纵轴的标签:`ax.set_xlabel('Date')`和`ax.set_ylabel('Tasks')` 7. 设置图像的标题:`ax.set_title('Gantt Chart')` 8. 显示图像:`plt.show()` 使用Plotly制作甘特图可以按照以下步骤进行: 1. 导入Plotly库:`import plotly.express as px` 2. 创建一个DataFrame,包含任务名称、开始日期和结束日期等信息 3. 使用`px.timeline()`创建一个基本甘特图对象 4. 使用`fig.add_trace()`在甘特图上添加任务 5. 设置甘特图的布局和样式,如标题、轴标签、轴范围等 6. 使用`fig.show()`显示甘特图 同时,也可以使用其他一些第三方库来绘制具有更丰富功能的甘特图,如GanttPV、pyGantt和ganttchart等。 需要根据具体项目需求选择合适的库和实现方式来制作甘特图。无论使用哪种方法,Python的灵活性和可扩展性使得制作甘特图变得简单且具有较高的可定制性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农研究僧

你的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值