Create interactive Primavera-style Gantt charts with Work Breakdown Structure (WBS) hierarchy and activities. Built on top of plotly for rich, interactive visualizations.
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
)
# Add milestone areas (date ranges) - use list column for dates
milestones <- data.frame(
label = c("Today", "Review Period", "Release"),
color = c("red", "blue", "green"),
fill_opacity = c(1, 0.15, 1) # Lower opacity for areas
)
milestones$date <- list(
Sys.Date(), # Single date = vertical line
c("10/01/2024", "10/31/2024"), # Two dates = shaded area
"12/01/2024" # Single date = vertical line
)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
milestone_lines = milestones
)
# Milestone label levels (prevent overlapping labels)
milestones <- data.frame(
label = c("Kickoff", "Budget Approval", "Review Period", "Go Live"),
color = c("blue", "green", "purple", "red"),
label_level = c(1, 2, 1, 2) # Level 1 appears above level 2
)
milestones$date <- list(
"01/05/2025",
"01/10/2025",
c("02/10/2025", "02/20/2025"),
"03/31/2025"
)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
milestone_lines = milestones
)
# Milestone custom tooltips
milestones <- data.frame(
label = c("Kickoff", "Review Period"),
color = c("blue", "purple"),
Description = c("Project kickoff meeting", "Technical design review"),
Owner = c("Project Manager", "Tech Lead")
)
milestones$date <- list("01/05/2025", c("02/10/2025", "02/20/2025"))
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
milestone_lines = milestones,
tooltip_config = list(
milestone = c("Description", "Owner")
)
)
# Hide y-axis labels (useful for presentations)
Ganttify(
wbs_structure = test_project$wbs_structure,
activities = test_project$activities,
layout_config = list(show_yaxis_labels = FALSE)
)
# 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
)
)
# Add custom fields to hover tooltips
# First add custom columns to your data
activities_extended <- test_project$activities
activities_extended$Status <- c("On Track", "Delayed", "Complete", ...)
activities_extended$Agency <- "TTI"
wbs_extended <- test_project$wbs_structure
wbs_extended$Owner <- "Project Manager"
Ganttify(
wbs_structure = wbs_extended,
activities = activities_extended,
tooltip_config = list(
wbs = c("Owner"),
activity = c("Status", "Agency")
)
)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, show_yaxis_labels)tooltip_config: List with custom tooltip fields (wbs:
columns from wbs_structure, activity: columns from activities,
milestone: columns from milestone_lines). Fields with NA/empty values
are auto-hidden.milestone_lines: Data frame with milestone dates and
labels. Use single date for vertical lines or two dates for shaded areas
(via list column). Supports fill_opacity for area transparency,
label_level (1 or 2) for vertical stacking, and custom columns for
tooltips.chart_title: Chart title (default: “Project Gantt Chart
with WBS”)x_range: Date range for x-axis zoomSee ?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