Ashley Evert’s 2006 thesis found that ball carriers had a distinct advantage over defenders forced to tackle with their non-dominant shoulder. Evert’s premise was that rugby players are predominantly stronger with their right shoulders compared to their left. This premise was supported by his analysis of try scoring origination data from the 2003-2005 Super 12 Rugby competition. Per Evert’s analysis, a tackler’s direction of approach is an important predictor of tackle success.
This article describes an approach to visualizing directional tackle data. We use a clock face metaphor to categorize the tackler’s angle of approach. The ball carrier’s running line is always 12 o’clock. The defender’s tracking angle is the clock face number corresponding to the tackler’s angle of approach relative to the ball carrier’s running line. 6 is directly behind the ball carrier. 12 is directly in front, and so on.
In this article we use example data and code to demonstrate tackle visualization by tracking angle.
We begin by visualizing team directional tackle data. First we generate tackle data to simulate a contest. Next we plot made and missed tackles in a bar chart. Then we plot the same data in a polar coordinate chart that visualizes tracking angles.
library(dplyr)
library(ggplot2)
library(tidyr)
set.seed(9940)
T <- data.frame(dir = 1:12, att = sample(5:12, 12, replace=TRUE))
head(T, 5)
## dir att
## 1 1 10
## 2 2 9
## 3 3 8
## 4 4 9
## 5 5 10
T <- T %>%
mutate(made = att - ceiling(att*runif(12, 0, .3))) %>%
mutate(miss = att - made) %>%
mutate(eff = round(made/att,2))
T$eff[is.nan(T$eff)] <- NA
tmade <- sum(T$made)
tatt <- sum(T$att)
eff <- round(tmade/tatt,2)
cat("Attempts:", tatt, "\nMade:", tmade, "\nEfficiency:", eff)
## Attempts: 103
## Made: 83
## Efficiency: 0.81
Tl <- T %>%
gather(res, count, made:miss) %>%
select(dir, res, count)
ggplot(Tl, aes(factor(dir), count, fill=factor(res))) +
geom_bar(width=.75, stat="identity") +
scale_fill_grey(name="Tackle\nResult", start=.5, end=.1) +
xlab("Direction") +
ylab("Tackle Count") +
ggtitle("Tackle Attempts by Direction")
This chart plots made and missed tackles by direction. The number of tackle attempts in each direction determines bar height.
ggplot(Tl, aes(factor(dir), count, fill=factor(res))) +
geom_bar(width=1, stat="identity", color="white") + coord_polar() +
scale_fill_grey(name="Tackle\nResult", start=.5, end=.1) +
theme(axis.ticks=element_blank(),
axis.text.y=element_blank(),
axis.title.y=element_blank(),
axis.title.x=element_blank()) +
ggtitle("Tackle Attempts by Direction")
The polar coordinate and bar charts show the same data. While the latter accurately conveys the information, the former makes it easier to visualize the directional tackle data. Tackle attempt frequency increases as we move from the center of the chart. The different colors represent the number of tackles made and missed in each direction.
The example data reveal that the majority team’s tackle attempts – and tackle completions – were from behind. (dirs 8-5) The team had fewer frontal tackle attempts (dirs 11-1) and completed a lower percentage of them relative to the rear tackles. They were slightly more efficient with left shoulder tackles (dirs 11-7) than right (dirs 5-1). The greater proportion of rear tackle attempts with the left shoulder partially explains the left shoulder dominance. Rear tackles are easier to complete than frontal or lateral tackles.
In this section we apply the same tackle visualization techniques to individual players.
names <- c("Sherwood", "Liberman", "Woodman", "Frieden", "Kivell", "Meyer", "Soto", "Steanson", "Hoetger", "Laibowitz", "Christie")
numbers=c("33", "44", "16", "40", "20", "35", "56", "87", "70", "41", "87")
position=c("LB", "DB", "DB", "DL", "LB", "DB", "LB", "LB", "DL", "DL", "DL")
team <- data.frame("name"=names, "number"=numbers, "position"=position)
player_tackle_attempts <- matrix(sample(0:9, 132, replace=TRUE),
ncol=12, nrow=11)
player_tackles_made <-
ceiling(player_tackle_attempts-player_tackle_attempts * runif(length(player_tackle_attempts),
0, .6))
player_tackles_made[is.na(player_tackles_made)] <- 0
colnames(player_tackle_attempts) <- paste(1:12, "ta", sep="")
colnames(player_tackles_made) <- paste(1:12, "tm", sep="")
player_tackles <- round(player_tackles_made/player_tackle_attempts,2)
colnames(player_tackles)<-c(1:12)
team_tackles <- cbind(team,player_tackles)
head(team_tackles)
## name number position 1 2 3 4 5 6 7 8 9 10
## 1 Sherwood 33 LB 0.44 NaN NaN 1.00 NaN 0.80 NaN 0.67 1.00 0.6
## 2 Liberman 44 DB 1.00 0.67 0.56 0.75 0.71 NaN 0.50 0.78 0.80 1.0
## 3 Woodman 16 DB NaN 1.00 1.00 1.00 0.67 0.80 0.71 0.43 1.00 1.0
## 4 Frieden 40 DL 1.00 0.67 1.00 0.50 1.00 1.00 0.75 0.60 0.67 NaN
## 5 Kivell 20 LB 1.00 NaN 0.56 1.00 0.78 0.67 0.67 0.57 1.00 1.0
## 6 Meyer 35 DB 0.67 1.00 0.71 0.75 1.00 NaN 0.78 1.00 0.67 0.8
## 11 12
## 1 1.00 0.89
## 2 1.00 0.67
## 3 0.67 1.00
## 4 1.00 1.00
## 5 1.00 0.56
## 6 1.00 NaN
player_eff <- round(apply(player_tackles_made, 1, sum)/apply(player_tackle_attempts, 1, sum),2)
dir_eff <- round(apply(player_tackles_made, 2, sum)/apply(player_tackle_attempts, 2, sum),2)
max_dir <- paste(which.max(dir_eff), "(", max(dir_eff), ")")
min_dir <- paste(which.min(dir_eff), "(", min(dir_eff), ")")
max_player <- paste(names[which.max(player_eff)], ":", max(player_eff))
Most efficient player: Christie : 0.92
Most efficiency direction (all players): 11 ( 0.89 )
Least efficient direction (all players): 8 ( 0.69 )
locations <- matrix(c(2,4,6,8,2,4,6,8,2,4,6,6,6,6,6,4,4,4,4,2,2,2), ncol=2, nrow=11)
circles <- matrix(1.0, ncol=12, nrow=11)
circles[is.nan(player_tackles[,1:12])] <- 0
The spokes of the background circle represent all of the tackle attempts from that direction. No spoke is drawn for directions where no tackles were attempted.
stars(circles, radius=TRUE, draw.segments=FALSE, locations=locations,
labels=paste(numbers, names, player_eff), flip.labels=FALSE, scale=FALSE, len=.75,
main = bquote("Directional Tackle" ~ epsilon ~ "by Player"))
stars(team_tackles[,c(6:4,15:7)], draw.segments=FALSE, scale=FALSE,
radius=TRUE, key.loc=c(8,2), labels=NULL, locations=locations,
len=.75, lwd=2, add=TRUE, frame.plot=TRUE)
Each chart represents a player. The black spokes plot tackle completion percentage. The gray spokes represent all attempts in each direction. The player made 100% of his tackles in the directions where the black spoke completely covers the gray spoke. Missing spokes mean the player did not attempt any tackles in that direction.
Hoetger, for example, completed most of his frontal tackle attempts. He struggled to complete tackles when chasing the ball carrier from behind. (dirs 4-8) This is a typical tackle profile for a defensive lineman in football.
Soto completed the majority of his tackle attempts in every direction. His tackle profile is almost ideal.
Christie’s profile is typical of a right shoulder dominant tackler. Many excellent tacklers show shoulder dominance. They are adept at using their tracking angle to force ball carriers to their dominant shoulder. Laibowitz also shows right shoulder preference.
Liberman’s profile could indicate a left shoulder dominant tackle forced to attempt right shoulder tackles by positioning or footwork.
This article demonstrates how to quantify and visualize directional tackle data from rugby or American football. Coaches can analyze individual players, positions, or the entire team, and apply the results to practice plans, player selections, and game plans.
Classifying tackles by direction reveals:
We used a polar coordinate plot to visualize team tackle attempts and completions by direction. The individual player plots visualize tackle efficiency in each direction. However, the player graph can be used to summarize team tackle efficiency, and the team graph can be used to quantify tackle attempts for individual players. Taken together, these visualization techniques and the accompanying clock face metaphor provide an intuitive framework for analyzing tackle data.
One direction for future work is applying this visualization technique to recorded (rather than simulated) tackle data from actual competitions.