table01 <- read_excel(
"Data_Tables_Recorded_Offences_Visualisation_Year_Ending_December_2025.xlsx",
sheet = "Table 01"
)
theft_trends <- table01 %>%
filter(`Offence Subdivision` == "B40 Theft") %>%
mutate(
Offence_Clean = stringr::str_remove(
`Offence Subgroup`,
"^B\\d+\\s+"
)
) %>%
group_by(Year, Offence_Clean) %>%
summarise(
Crime_Rate = sum(`Rate per 100,000 population`),
.groups = "drop"
)
ggplot(
theft_trends,
aes(
x = Year,
y = Crime_Rate,
colour = Offence_Clean,
group = Offence_Clean
)
) +
geom_line(size = 1.2) +
geom_point(size = 2.5) +
scale_color_brewer(palette = "Dark2") +
theme_minimal() +
labs(
title = "Statewide Theft Trends in Victoria",
subtitle = "2016–2025",
x = "Year",
y = "Rate per 100,000 Population",
colour = "Theft Type"
)
This line chart shows statewide theft trends in Victoria from 2016 to 2025, measured as offences per 100,000 people.
Steal from a motor vehicle is consistently the most common theft type and rises sharply after 2023, reaching its highest level in 2025.
Other theft remains the second most common category, declining until 2021 before increasing again from 2022 onward.
Motor vehicle theft and retail store theft show strong growth after 2022, indicating a recent increase in these offences.
Receiving or handling stolen goods and bicycle theft remain relatively stable over the decade.
Fare evasion has the lowest rate throughout the period, with only minor fluctuations.
trend_data <- table01 %>%
group_by(Year, `Offence Division`) %>%
summarise(
Total_Count = sum(`Offence Count`),
.groups = "drop"
)
ggplot(
trend_data,
aes(
Year,
Total_Count,
colour = `Offence Division`
)
) +
geom_line(size = 1) +
geom_point(size = 2) +
facet_wrap(~`Offence Division`, scales = "free_y") +
theme_minimal() +
theme(legend.position = "none") +
labs(
title = "Crime Trends Across Offence Divisions",
y = "Recorded Offences"
)
table03 <- read_excel(
"Data_Tables_Recorded_Offences_Visualisation_Year_Ending_December_2025.xlsx",
sheet = "Table 03"
)
family_data <- table03 %>%
filter(Year >= 2021) %>%
group_by(
Year,
`Offence Division`,
`Family Incident Flag`
) %>%
summarise(
Total_Count = sum(`Offence Count`),
.groups = "drop"
)
ggplot(
family_data,
aes(
factor(Year),
Total_Count,
fill = `Family Incident Flag`
)
) +
geom_col(position = "dodge") +
facet_wrap(~`Offence Division`, scales = "free_y") +
scale_fill_brewer(palette = "Set2") +
theme_minimal() +
labs(
title = "Family vs Non-Family Incidents"
)
This grouped bar chart compares family-related and non-family-related incidents across six offence divisions in Victoria from 2021 to 2025.
Overall, the chart highlights that most crime categories are dominated by non-family-related incidents, while family-related incidents are particularly significant in crimes against the person and justice procedure offences.
table04 <- read_excel(
"Data_Tables_Recorded_Offences_Visualisation_Year_Ending_December_2025.xlsx",
sheet = "Table 04"
)
heatmap_data <- table04 %>%
filter(Year == 2025) %>%
group_by(
`Offence Division`,
`Investigation Status`
) %>%
summarise(
Total_Count = sum(`Offence Count`),
.groups = "drop"
) %>%
group_by(`Offence Division`) %>%
mutate(
Percentage = Total_Count /
sum(Total_Count) * 100
)
ggplot(
heatmap_data,
aes(
`Investigation Status`,
`Offence Division`,
fill = Percentage
)
) +
geom_tile() +
scale_fill_viridis_c(option = "magma") +
theme_minimal() +
theme(
axis.text.x =
element_text(angle = 45, hjust = 1)
) +
labs(
title = "Investigation Outcomes (2025)"
)
This heatmap shows the proportion of investigation outcomes for different offence divisions in Victoria in 2025, with lighter colours indicating higher percentages.
Overall, the heatmap reveals that law enforcement is most successful in resolving drug and justice-related offences, while property-related crimes have the highest rate of unresolved investigations.
table02 <- read_excel(
"Data_Tables_Recorded_Offences_Visualisation_Year_Ending_December_2025.xlsx",
sheet = "Table 02"
)
theft_data <- table02 %>%
filter(
Year == 2025,
`Offence Subdivision` == "B40 Theft"
) %>%
group_by(
`Location Subdivision`,
`Offence Subgroup`
) %>%
summarise(
Total_Count = sum(`Offence Count`),
.groups = "drop"
) %>%
mutate(
Offence_Clean =
str_remove(`Offence Subgroup`,
"^B\\d+\\s+"),
Location_Clean =
str_remove(`Location Subdivision`,
"^\\d+\\s+")
)
top_locations <- theft_data %>%
group_by(Location_Clean) %>%
summarise(Total = sum(Total_Count)) %>%
slice_max(Total, n = 10) %>%
pull(Location_Clean)
plot_data <- theft_data %>%
filter(Location_Clean %in% top_locations)
ggplot(
plot_data,
aes(
x = Total_Count,
y = reorder(Location_Clean, Total_Count, sum),
fill = Offence_Clean
)
) +
geom_col() +
scale_fill_brewer(palette = "Dark2") +
theme_minimal() +
labs(
title = "Environmental & Spatial Distribution of Theft"
)
This stacked bar chart shows the distribution of theft offences across different locations in Victoria in 2025, highlighting where different types of theft are most common.
Overall, the chart reveals that theft is concentrated in retail, transport-related, and public-access environments, with different locations exhibiting distinct patterns of theft behaviour.
RMIT University. (2025). Data Visualisation and Communication — Lecture notes. School of Computing Technologies.
Crime Statistics Agency Victoria. (2025, September). Recorded offences – data tables (Year ending June 2025). https://www.crimestatistics.vic.gov.au (https://www.crimestatistics.vic.gov.au)
RPubs. (n.d.). RPubs by Posit. https://rpubs.com (https://rpubs.com)