# Plot: curved arcs (geom_curve) — adjust curvature to taste
circle_plot <- ggplot2::ggplot() +
ggplot2::geom_curve(
data = edges,
ggplot2::aes(x = x1, y = y1, xend = x2, yend = y2),
curvature = 0.22,
arrow = ggplot2::arrow(length = ggplot2::unit(0.15, "cm")),
linewidth = 0.8,
color = "gray30"
) +
cfbplotR::geom_cfb_logos(
data = circle_positions,
ggplot2::aes(x = x, y = y, team = team),
width = 0.10
) +
ggplot2::coord_equal() +
hrbrthemes::theme_ipsum_rc() +
ggplot2::labs(
x = "",
y = "",
caption = "Viz by Chris at Bless your chart \ndata via collegefootballdata.com \n Games through November 16, 2025"
) +
ggplot2::theme(
panel.grid.major = ggplot2::element_blank(),
panel.grid.minor = ggplot2::element_blank(),
axis.text.x = ggplot2::element_blank(),
axis.text.y = ggplot2::element_blank(),
axis.ticks = ggplot2::element_blank(),
panel.background = ggplot2::element_rect(fill = "floralwhite", color = NA),
plot.background = ggplot2::element_rect(fill = "floralwhite", color = NA),
plot.caption = ggplot2::element_text(hjust = 0.5)
) +
ggplot2::annotate(
geom = "text",
x = 0,
y = 0.15,
label = "Any Given Saturday \n",
color = "#333333",
size = 9.5,
fontface = 'bold',
family = 'Roboto Condensed',
hjust = 0.5
) +
ggplot2::annotate(
geom = "text",
x = 0,
y = 0,
label = "College Football's \nCircle of Parity",
color = "#333333",
size = 7.5,
alpha = 0.65,
fontface = 'bold',
family = 'Roboto Condensed',
hjust = 0.5
) +
# --- Notre Dame (49-10) over Navy ---
ggplot2::annotate(
geom = "label",
x = 0.13,
y = 0.9,
label = "49-10",
fill = "#c99700", # Notre Dame Gold
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Navy (41-38) over South Florida ---
ggplot2::annotate(
geom = "label",
x = 0.4,
y = 0.8,
label = "41-38",
fill = "#00205B", # Navy Blue
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- South Florida (18-16) over Florida ---
ggplot2::annotate(
geom = "label",
x = 0.65,
y = 0.6,
label = "18-16",
fill = "#006747", # South Florida Green
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Florida (29-21) over Texas ---
ggplot2::annotate(
geom = "label",
x = 0.75,
y = 0.40,
label = "29-21",
fill = "#FA4616", # Florida Orange (with Blue being secondary)
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Texas (23-6) over Oklahoma ---
ggplot2::annotate(
geom = "label",
x = 0.80,
y = 0.10,
label = "23-6",
fill = "#BF5700", # Texas Burnt Orange
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Oklahoma (26-7) over South Carolina ---
ggplot2::annotate(
geom = "label",
x = 0.78,
y = -0.20,
label = "26-7",
fill = "#841617", # Oklahoma Crimson
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- South Carolina (24-11) over Virginia Tech ---
ggplot2::annotate(
geom = "label",
x = 0.68,
y = -0.50,
label = "24-11",
fill = "#73000A", # South Carolina Garnet
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Virginia Tech (23-21) over NC State ---
ggplot2::annotate(
geom = "label",
x = 0.55,
y = -0.70,
label = "23-21",
fill = "#63002C", # Virginia Tech Maroon
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- NC State (48-36) over Georgia Tech ---
ggplot2::annotate(
geom = "label",
x = 0.30,
y = -0.85,
label = "48-36",
fill = "#CC0000", # NC State Red
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Georgia Tech (30-29) over Wake Forest ---
ggplot2::annotate(
geom = "label",
x = 0,
y = -0.85,
label = "30-29 \n(OT)",
fill = "#B3A369", # Georgia Tech Gold
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Wake Forest (13-12) over SMU ---
ggplot2::annotate(
geom = "label",
x = -0.25,
y = -0.85,
label = "13-12",
fill = "#9E7E45", # Wake Forest Gold
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- SMU (34-10) over Stanford ---
ggplot2::annotate(
geom = "label",
x = -0.55,
y = -0.7,
label = "34-10",
fill = "#0033A0", # SMU Blue
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Stanford (20-13) over Florida State ---
ggplot2::annotate(
geom = "label",
x = -0.7,
y = -0.45,
label = "20-13",
fill = "#8C1515", # Stanford Cardinal
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Florida State (31-17) over Alabama ---
ggplot2::annotate(
geom = "label",
x = -0.8,
y = -0.2,
label = "31-17",
fill = "#782F40", # Florida State Garnet
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Alabama (20-9) over LSU ---
ggplot2::annotate(
geom = "label",
x = -0.8,
y = 0.10,
label = "20-9",
fill = "#820000", # Alabama Crimson
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- LSU (17-10) over Clemson ---
ggplot2::annotate(
geom = "label",
x = -0.72,
y = 0.37,
label = "17-10",
fill = "#461D7C", # LSU Purple
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Clemson (20-19) over Louisville ---
ggplot2::annotate(
geom = "label",
x = -0.6,
y = 0.65,
label = "20-19",
fill = "#F66733", # Clemson Orange
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Louisville (24-21) over Miami ---
ggplot2::annotate(
geom = "label",
x = -0.40,
y = 0.8,
label = "24-21",
fill = "#AD0000", # Louisville Red
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
) +
# --- Miami (27-24) over Notre Dame (Closes the circle) ---
ggplot2::annotate(
geom = "label",
x = -0.15,
y = 0.90,
label = "27-24",
fill = "#F49100", # Miami Orange
color = "#333333",
size =4,
fontface = 'bold',
family = 'Roboto Condensed',
alpha = .3,
hjust = 0.5
)
ggplot2::ggsave(
"circle_plot.png",
circle_plot,
w = 8.5,
h = 8.5,
dpi = 600,
type = 'cairo'
)
circle_plot