import matplotlib.pyplot as plt import seaborn as sns import numpy as np from matplotlib.patches import Rectangle from matplotlib.collections import PatchCollection # 设置样式 sns.set_style("whitegrid") plt.figure(figsize=(15, 8)) # 项目阶段定义 phases = [ {"name": "数据准备与算法开发", "start": "2025-04", "end": "2025-08", "color": "#FFD700"}, {"name": "核心系统搭建与优化", "start": "2025-09", "end": "2025-12", "color": "#1E90FF"}, {"name": "应用验证与成果交付", "start": "2026-01", "end": "2026-04", "color": "#32CD32"} ] # 技术模块定义 modules = [ {"name": "输入层(数据采集)", "phase": 0, "y": 5, "milestone": "数据集完成验收"}, {"name": "跨模态对齐引擎", "phase": 0, "y": 4, "milestone": "时空对齐算法原型"}, {"name": "分层噪声处理系统", "phase": 1, "y": 3, "milestone": "噪声抑制达标"}, {"name": "物理约束增强层", "phase": 1, "y": 2, "milestone": "热解动力学规则库"}, {"name": "边缘智能轻量化模块", "phase": 2, "y": 1, "milestone": "边缘部署成功"}, {"name": "验证输出层", "phase": 2, "y": 0, "milestone": "全链路贯通"} ] # 创建时间轴 date_range = pd.date_range(start="2025-04", end=
时间: 2025-05-19 18:12:58 浏览: 26
### 使用 Matplotlib 和 Seaborn 绘制带时间轴的项目阶段和技术模块甘特图
尽管 Plotly 提供了专门用于绘制甘特图的功能 `create_gantt` 方法[^1],但用户希望使用 **Matplotlib** 和 **Seaborn** 来实现类似的图表。以下是详细的解决方案。
#### 数据准备
为了绘制甘特图,通常需要以下字段:
- **任务名称 (Task)**:表示每个活动或阶段。
- **开始时间 (Start)**:任务启动的时间戳。
- **结束时间 (Finish)**:任务完成的时间戳。
这些数据可以存储在一个 Pandas DataFrame 中以便于处理和绘图。
```python
import pandas as pd
from datetime import datetime, timedelta
data = {
'Task': ['Phase 1', 'Phase 2', 'Module A', 'Module B'],
'Start': [
datetime(2023, 1, 1),
datetime(2023, 2, 1),
datetime(2023, 1, 15),
datetime(2023, 2, 15)
],
'Finish': [
datetime(2023, 1, 31),
datetime(2023, 3, 1),
datetime(2023, 2, 14),
datetime(2023, 3, 14)
]
}
df = pd.DataFrame(data)
```
#### 图表绘制逻辑
通过 Matplotlib 可以手动创建条形图来模拟甘特图的效果。具体步骤如下:
1. 计算每项任务的持续时间和位置偏移量。
2. 设置 Y 轴标签为任务名称。
3. 使用 `barh` 函数绘制水平条形图。
4. 添加日期刻度并调整 X 轴范围。
下面是完整的代码示例:
```python
import matplotlib.pyplot as plt
import seaborn as sns
sns.set(style="whitegrid") # 设置样式
fig, ax = plt.subplots(figsize=(10, 6))
# 配置颜色映射
colors = sns.color_palette("husl", len(df))
for i, row in enumerate(df.itertuples()):
start_date = row.Start
end_date = row.Finish
duration = (end_date - start_date).days
ax.barh(row.Task, width=duration, left=start_date, color=colors[i], edgecolor='black')
# 设置日期格式
date_format = "%Y-%m-%d"
ax.xaxis_date()
ax.xaxis.set_major_formatter(plt.DateFormatter(date_format))
# 自动调整布局
plt.xticks(rotation=45)
plt.xlabel('Date')
plt.ylabel('Tasks')
plt.title('Project Timeline Gantt Chart with Matplotlib and Seaborn')
plt.tight_layout()
plt.show()
```
上述代码实现了基于 Matplotlib 和 Seaborn 的甘特图绘制功能。其中,Seaborn 主要负责美化风格[^2],而核心绘图操作由 Matplotlib 执行[^3]。
#### 进一步优化建议
如果需要更复杂的功能(如交互式图表),可以考虑引入 Plotly 或 Bokeh 等工具作为补充[^4]。对于简单的静态展示场景,当前方案已经足够满足需求。
---
相关问题
阅读全文
相关推荐



















