| name | gantt-chart-creator |
| description | Create project timeline Gantt charts with dependencies, milestones, and progress tracking. Supports static (PNG/SVG) and interactive (HTML) output. |
Gantt Chart Creator
Create professional project timeline Gantt charts with task dependencies, milestones, progress tracking, and customizable styling. Perfect for project management, sprint planning, and timeline visualization.
Quick Start
from scripts.gantt_creator import GanttChartCreator
gantt = GanttChartCreator()
gantt.add_task("Research", "2024-01-01", "2024-01-07")
gantt.add_task("Design", "2024-01-08", "2024-01-14")
gantt.add_task("Development", "2024-01-15", "2024-01-28")
gantt.add_task("Testing", "2024-01-29", "2024-02-04")
gantt.generate().save("project.png")
gantt = GanttChartCreator()
gantt.from_csv("tasks.csv", task="name", start="start_date", end="end_date", progress="pct")
gantt.title("Q1 Roadmap").show_today().generate().save("roadmap.png")
Features
- Multiple Input Sources: CSV, JSON, dict, or programmatic
- Task Properties: Name, dates, progress, assignee, category
- Dependencies: Finish-to-start and other dependency types
- Milestones: Diamond markers for key dates
- Progress Tracking: Visual progress bars within tasks
- Today Marker: Vertical line showing current date
- Color Coding: By category, assignee, or status
- Output Formats: PNG, SVG, PDF (matplotlib) or HTML (interactive)
API Reference
Initialization
gantt = GanttChartCreator()
Data Input Methods
gantt.from_csv(
filepath="tasks.csv",
task="task_name",
start="start_date",
end="end_date",
progress="completion",
category="category",
assignee="owner"
)
gantt.from_tasks([
{'name': 'Task 1', 'start': '2024-01-01', 'end': '2024-01-07'},
{'name': 'Task 2', 'start': '2024-01-08', 'end': '2024-01-14', 'progress': 50},
{'name': 'Task 3', 'start': '2024-01-15', 'end': '2024-01-21', 'category': 'Dev'}
])
gantt.add_task(
name="Research Phase",
start="2024-01-01",
end="2024-01-14",
progress=100,
category="Planning",
assignee="Alice"
)
gantt.add_milestone(, )
gantt.add_milestone(, , color=)
Dependencies
gantt.add_dependency("Design", "Development")
gantt.add_dependency("Development", "Testing")
gantt.add_dependency("Task A", "Task B", type="FS")
gantt.add_dependency("Task A", "Task B", type="SS")
gantt.add_dependency("Task A", "Task B", type="FF")
gantt.add_dependency("Task A", "Task B", type="SF")
Styling
gantt.title("Project Timeline")
gantt.title("Q1 2024 Roadmap", font_size=16)
gantt.color_by("category")
gantt.color_by("category", colors={
'Planning': '#3498db',
'Development': '#2ecc71',
'Testing': '#e74c3c'
})
gantt.color_by("assignee")
gantt.show_progress(True)
gantt.show_today(True)
gantt.show_today(True, color='red', label='Today')
gantt.date_range("2024-01-01", "2024-03-31")
gantt.grid(show=True, style='weekly')
Generation and Export
gantt.generate()
gantt.generate(interactive=True)
gantt.save("chart.png")
gantt.save("chart.svg")
gantt.save("chart.pdf")
gantt.save("chart.html")
fig = gantt.get_figure()
gantt.show()
Data Formats
CSV Format
task,start_date,end_date,progress,category,assignee
Research,2024-01-01,2024-01-07,100,Planning,Alice
Design,2024-01-08,2024-01-14,100,Planning,Bob
Backend Dev,2024-01-15,2024-01-28,75,Development,Alice
Frontend Dev,2024-01-15,2024-01-21,50,Development,Carol
Testing,2024-01-29,2024-02-04,0,QA,Dave
Task Dictionary Format
tasks = [
{
'name': 'Research',
'start': '2024-01-01',
'end': '2024-01-07',
'progress': 100,
'category': 'Planning',
'assignee': 'Alice'
},
{
'name': 'Design',
'start': '2024-01-08',
'end': '2024-01-14',
'progress': 75,
'category': 'Planning'
}
]
Date Formats
Supported date formats (auto-detected):
YYYY-MM-DD (ISO format, recommended)
MM/DD/YYYY
DD/MM/YYYY
YYYY/MM/DD
CLI Usage
python gantt_creator.py --input tasks.csv \
--task name --start start_date --end end_date \
--output gantt.png
python gantt_creator.py --input project.csv \
--task task --start begin --end finish \
--progress pct --category type \
--title "Project Timeline" \
--output timeline.png
python gantt_creator.py --input tasks.csv \
--task name --start start --end end \
--interactive \
--output gantt.html
python gantt_creator.py --input tasks.csv \
--task name --start start --end end \
--show-today \
--output current_status.png
CLI Arguments
| Argument | Description | Default |
|---|
--input | Input CSV file | Required |
--task | Task name column | Required |
--start | Start date column | Required |
--end | End date column | Required |
--progress | Progress % column | - |
--category | Category column (for coloring) | - |
--assignee | Assignee column (for coloring) | - |
--output | Output file path | gantt.png |
--title | Chart title | - |
--interactive | Generate interactive HTML | False |
--show-today | Show today marker | False |
--show-progress | Show progress bars | False |
--width | Chart width | 12 |
--height | Chart height | 6 |
Examples
Simple Project Timeline
gantt = GanttChartCreator()
gantt.add_task("Planning", "2024-01-01", "2024-01-14")
gantt.add_task("Development", "2024-01-15", "2024-02-15")
gantt.add_task("Testing", "2024-02-16", "2024-02-28")
gantt.add_task("Deployment", "2024-03-01", "2024-03-07")
gantt.title("Project Alpha")
gantt.generate().save("project_alpha.png")
With Dependencies and Milestones
gantt = GanttChartCreator()
gantt.add_task("Requirements", "2024-01-01", "2024-01-07")
gantt.add_task("Design", "2024-01-08", "2024-01-14")
gantt.add_task("Backend", "2024-01-15", "2024-01-28")
gantt.add_task("Frontend", "2024-01-15", "2024-01-21")
gantt.add_task("Integration", "2024-01-29", "2024-02-04")
gantt.add_task("Testing", "2024-02-05", "2024-02-11")
gantt.add_milestone("Kickoff", "2024-01-01")
gantt.add_milestone("Code Freeze", "2024-02-04")
gantt.add_milestone("Launch", "2024-02-12")
gantt.add_dependency("Requirements", "Design")
gantt.add_dependency("Design", "Backend")
gantt.add_dependency("Design", "Frontend")
gantt.add_dependency("Backend", "Integration")
gantt.add_dependency("Frontend", "Integration")
gantt.add_dependency("Integration", "Testing")
gantt.title("Development Timeline")
gantt.generate().save("dev_timeline.png")
Color-Coded by Category
gantt = GanttChartCreator()
gantt.from_csv("tasks.csv", task="name", start="start", end="end", category="type")
gantt.color_by("category", colors={
'Backend': '#3498db',
'Frontend': '#2ecc71',
'DevOps': '#9b59b6',
'QA': '#e74c3c'
})
gantt.title("Sprint 5 Tasks")
gantt.show_today()
gantt.generate().save("sprint5.png")
Progress Tracking
gantt = GanttChartCreator()
gantt.add_task("Research", "2024-01-01", "2024-01-07", progress=100)
gantt.add_task("Design", "2024-01-08", "2024-01-14", progress=100)
gantt.add_task("Development", "2024-01-15", "2024-01-28", progress=60)
gantt.add_task("Testing", "2024-01-29", "2024-02-04", progress=0)
gantt.show_progress(True)
gantt.show_today(True)
gantt.title("Project Status")
gantt.generate().save("status.png")
Interactive HTML Chart
gantt = GanttChartCreator()
gantt.from_csv("project.csv", task="task", start="start", end="end",
progress="pct", category="team")
gantt.color_by("team")
gantt.show_progress(True)
gantt.title("Interactive Project View")
gantt.generate(interactive=True)
gantt.save("project.html")
Team Workload
gantt = GanttChartCreator()
gantt.add_task("Alice: Research", "2024-01-01", "2024-01-07", assignee="Alice")
gantt.add_task("Alice: Backend", "2024-01-08", "2024-01-21", assignee="Alice")
gantt.add_task("Bob: Design", "2024-01-01", "2024-01-14", assignee="Bob")
gantt.add_task("Bob: Frontend", "2024-01-15", "2024-01-28", assignee="Bob")
gantt.add_task("Carol: Testing", "2024-01-22", "2024-02-04", assignee="Carol")
gantt.color_by("assignee", colors={
'Alice': '#3498db',
'Bob': '#2ecc71',
'Carol': '#e74c3c'
})
gantt.title("Team Workload - January")
gantt.generate().save("team_workload.png")
Dependencies
matplotlib>=3.7.0
plotly>=5.15.0
pandas>=2.0.0
kaleido>=0.2.0
Limitations
- Static charts (matplotlib) have limited interactivity
- Complex dependency networks may be hard to visualize
- Date granularity is daily (no hour-level precision)
- Maximum ~50 tasks for readable charts