Load Required Packages
library(tidyverse)
library(ggplot2)
library(scales)
Generate Sample Data
set.seed(123)
bike_categories <- c('Cross Country Race', 'Elite Road', 'Trail',
'Endurance Road', 'Over Mountain', 'Triathalon',
'Sport', 'Cyclocross', 'Fat Bike')
time_points <- 1:20
bike_data <- data.frame()
for (category in bike_categories) {
if (category == "Cross Country Race") {
sales <- runif(20, 0.5, 2.0) * 1000000
} else if (category == "Elite Road") {
sales <- runif(20, 0.3, 1.5) * 1000000
} else if (category == "Trail") {
sales <- runif(20, 0.2, 1.0) * 1000000
} else if (category == "Endurance Road") {
sales <- runif(20, 0.3, 1.0) * 1000000
} else if (category == "Over Mountain") {
sales <- runif(20, 0.2, 0.7) * 1000000
} else if (category == "Triathalon") {
sales <- runif(20, 0.1, 0.5) * 1000000
} else if (category == "Sport") {
sales <- runif(20, 0.05, 0.3) * 1000000
} else if (category == "Cyclocross") {
sales <- runif(20, 0.05, 0.25) * 1000000
} else {
sales <- runif(20, 0.02, 0.15) * 1000000
}
df <- data.frame(
Time = time_points,
Sales = sales,
Category = category
)
bike_data <- rbind(bike_data, df)
}
Bike Sales by Category
category_colors <- c(
'Cross Country Race' = '#2C3E50',
'Elite Road' = '#E74C3C',
'Trail' = '#16A085',
'Endurance Road' = '#D4AC6E',
'Over Mountain' = '#85C1E2',
'Triathalon' = '#34495E',
'Sport' = '#95A5A6',
'Cyclocross' = '#E67E73',
'Fat Bike' = '#7F8C8D'
)
ggplot(bike_data, aes(x = Time, y = Sales)) +
geom_line(aes(color = Category), linewidth = 1, show.legend = FALSE) +
geom_point(aes(color = Category), size = 2, show.legend = FALSE) +
facet_wrap(~ Category, scales = "free_y", ncol = 3) +
scale_color_manual(values = category_colors) +
scale_y_continuous(labels = dollar_format(scale = 1e-6, suffix = "M")) +
labs(x = "", y = "Sales") +
theme_minimal() +
theme(
strip.background = element_rect(fill = "#2C3E50", color = "#2C3E50"),
strip.text = element_text(size = 11, face = "bold", color = "white"),
panel.background = element_rect(fill = "gray95"),
panel.grid.major = element_line(color = "white", linewidth = 0.5),
panel.grid.minor = element_line(color = "white", linewidth = 0.3),
axis.text = element_text(size = 9),
axis.title.y = element_text(size = 11, face = "bold")
)
