# Create a mock dataset for crime in Bangladesh (2000–2024)
set.seed(123)

years <- 2000:2024
crime_types <- c("Murder", "Rape", "Robbery", "Mob Violence", "Vandalism", "Psycho-killing")
statuses <- c("Solved", "Unsolved", "Closed", "Replicated")

crime_data <- expand.grid(
  year = years,
  crime_type = crime_types,
  status = statuses
)

crime_data$total_cases <- sample(20:500, nrow(crime_data), replace = TRUE)

# Preview
head(crime_data)
##   year crime_type status total_cases
## 1 2000     Murder Solved         434
## 2 2001     Murder Solved         482
## 3 2002     Murder Solved         198
## 4 2003     Murder Solved          33
## 5 2004     Murder Solved         214
## 6 2005     Murder Solved         445
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
summary_plot <- crime_data %>%
  group_by(year, crime_type) %>%
  summarise(total = sum(total_cases))
## `summarise()` has grouped output by 'year'. You can override using the
## `.groups` argument.
ggplot(summary_plot, aes(x = year, y = total, color = crime_type)) +
  geom_line(size = 1, alpha = 0.8) +
  labs(title = "Trends in Crime Types in Bangladesh (2000–2024)",
       x = "Year", y = "Total Cases") +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

library(plotly)
## Warning: package 'plotly' was built under R version 4.4.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
ggplotly()
library(gganimate)
## Warning: package 'gganimate' was built under R version 4.4.3
anim <- ggplot(crime_data, aes(x = crime_type, y = total_cases, fill = status)) +
  geom_bar(stat = "identity", position = "dodge") +
  labs(title = "Crime Status by Type",
       subtitle = "Year: {frame_time}",
       x = "Crime Type", y = "Number of Cases") +
  transition_time(year) +
  ease_aes("linear") +
  theme_minimal()

animate(anim, renderer = gifski_renderer())

anim_save("crime_animation.gif", animation = last_animation())