Create interactive Primavera-style Gantt charts with Work Breakdown Structure (WBS) hierarchy and activities. Built on top of plotly for rich, interactive visualizations.
- WBS Hierarchy: Organize projects with multi-level Work Breakdown Structure
- Flexible Coloring: Three color modes - WBS-based, uniform, or attribute-based (status, priority, etc.)
- Interactive Charts: Pan, zoom, and hover for detailed information
- Dynamic Date Formatting: Automatically adjusts time scale based on zoom level
- Scrollable Views: Handle large projects with vertical scrolling
- Milestone Lines: Add vertical date markers with custom labels (including "today" line)
- Past Activity Dimming: Optionally dim completed activities for better focus (via bar_config)
- Flexible Display: Show/hide WBS and activity names on bars (via display_config)
- Custom Label Templates: Customize labels with placeholders for dates, duration, IDs (via label_config)
- Planned vs Actual: Show both planned and actual dates with visual distinction
- Configuration-Based API: Organized parameters into logical config objects for cleaner code
install.packages("ganttify")# Install devtools if you haven't already
install.packages("devtools")
# Install ganttify from GitHub
devtools::install_github("AhmedAredah/Ganttify")library(ganttify)
# Load the example dataset
data(test_project)
# Create a basic Gantt chart
chart <- Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
color_config = list(mode = "wbs", wbs = test_project$colors)
)
# Display the chart
chartlibrary(ganttify)
data(test_project)
# Simple chart with default settings
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
color_config = list(mode = "wbs", wbs = test_project$colors),
chart_title = "My Project Schedule"
)
# Activities inherit colors from their parent WBS item
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
color_config = list(
mode = "wbs",
wbs = test_project$colors
)
)# All activities one color, all WBS items one color
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
color_config = list(
mode = "uniform",
uniform = list(
wbs = "#34495E", # dark gray for WBS
activity = "#2ECC71" # green for activities
)
)
)# Color activities by custom attribute (e.g., Status, Priority)
# First, add a status column to activities
activities_with_status <- test_project$activities
activities_with_status$Status <- c("completed", "in-progress", "not-started", ...)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = activities_with_status,
color_config = list(
mode = "attribute",
attribute = list(
column = "Status",
mapping = list(
"completed" = "#27AE60", # green
"in-progress" = "#F39C12", # orange
"not-started" = "#95A5A6", # gray
"stopped" = "#E74C3C" # red
),
wbs = "#34495E" # dark gray for WBS
)
)
)# WBS-only view (hide activities using display_config)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
display_config = list(activity = list(show = FALSE))
)
# Custom labels with date ranges
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
label_config = list(
activity = list(yaxis = "{name} ({start} - {end})"),
wbs = list(yaxis = "{name}")
)
)
# Customize bar appearance and dim past activities
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
bar_config = list(
wbs = list(opacity = 0.5, height = 0.4),
activity = list(height = 0.9, dim_past_activities = TRUE, dim_opacity = 0.4)
)
)
# Add "today" line and other milestones
milestones <- data.frame(
date = c(Sys.Date(), "10/15/2024", "12/01/2024"),
label = c("Today", "Review", "Release"),
color = c("red", "blue", "green")
)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
milestone_lines = milestones
)
# Adjust layout settings
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
layout_config = list(
buffer_days = 60,
indent_size = 4,
max_visible_rows = 30
)
)
# Narrow label area with automatic truncation
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
layout_config = list(
yaxis_label_width = 200,
yaxis_label_max_chars = 25
)
)
# Control hover popup width with text wrapping
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
layout_config = list(
hover_popup_max_chars = 30 # Wrap long text in popups at 30 chars
)
)Your WBS data frame should have 3 columns:
wbs_structure <- data.frame(
ID = c("W1", "W2", "W3"),
Name = c("Project", "Phase 1", "Phase 2"),
Parent = c("None", "W1", "W1")
)Your activities data frame should have 5 columns:
activities <- data.frame(
WBS_ID = c("W2", "W2", "W3"),
Activity_ID = c("A1", "A2", "A3"),
Activity_Name = c("Design", "Development", "Testing"),
Start_Date = c("01/01/2024", "02/01/2024", "03/01/2024"),
End_Date = c("01/31/2024", "02/28/2024", "03/31/2024")
)Note: Dates must be in MM/DD/YYYY format.
The color_config parameter controls all chart colors. Three modes available:
1. WBS Mode (default) - Activities inherit colors from parent WBS:
color_config = list(
mode = "wbs",
wbs = list("W1" = "#FF6B6B", "W2" = "#4ECDC4")
)2. Uniform Mode - All activities same color:
color_config = list(
mode = "uniform",
uniform = list(wbs = "#34495E", activity = "#2ECC71")
)3. Attribute Mode - Color by custom attribute:
color_config = list(
mode = "attribute",
attribute = list(
column = "Status",
mapping = list("completed" = "green", "in-progress" = "orange"),
wbs = "#34495E"
)
)Key parameters for the Ganttify() function:
wbs_structure: Data frame with WBS hierarchy (ID, Name, Parent)activities: Data frame with activities (WBS_ID, Activity_ID, Activity_Name, Start_Date, End_Date)
color_config: List configuring chart colors (mode: "wbs", "uniform", or "attribute")display_config: List controlling visibility (WBS/activity show, labels, names on bars)label_config: List with label templates for y-axis and bars (supports placeholders)bar_config: List with bar styling (opacity, height, dim_opacity, dim_past_activities)layout_config: List with layout settings (buffer_days, indent_size, max_visible_rows, y_scroll_position, yaxis_label_width, yaxis_label_max_chars, hover_popup_max_chars)
milestone_lines: Data frame with milestone dates and labels (use Sys.Date() for "today" line)chart_title: Chart title (default: "Project Gantt Chart with WBS")x_range: Date range for x-axis zoom
See ?Ganttify for complete documentation.
library(htmlwidgets)
# Create chart
chart <- Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
color_config = list(mode = "wbs", wbs = test_project$colors)
)
# Save as HTML
saveWidget(chart, "my_gantt_chart.html")Contributions are welcome! Please feel free to submit a Pull Request.
GPL-3
Ahmed Aredah (Ahmed.Aredah@gmail.com)
Report bugs and request features at: https://github.com/AhmedAredah/Ganttify/issues