This could be achieved via ggforce::geom_arc
:
library(ggforce)
#> Loading required package: ggplot2
library(tibble)
ggplot() +
geom_rect(data = data_box, aes(xmin = xmin, xmax = xmax,
ymin = ymin, ymax = ymax),
color ="#00529f", alpha = 0.1) +
geom_linerange(data = data_line, aes(x = x, ymin = ymin, ymax = ymax),
color = "#00529f") +
geom_point(data = data_penalty, aes(x = x, y = y), size = 1, color = "#00529f") +
geom_circle(mapping = aes(x0 = 298.485, y0 = 248.5, r = 52), color = "#00529f") +
ggforce::geom_arc(data = data_corner, aes(x0 = x0, y0 = y0, start = start, end = end, r = 15), color = "#00529f") +
ggforce::geom_arc(data = data_semi, aes(x0 = x0, y0 = y0, start = start, end = end, r = 30), color = "#00529f") +
scale_x_continuous(expand = c(0,0)) +
scale_y_continuous(expand = c(0,0)) +
coord_fixed() +
theme_no_axes(base.theme = theme_bw()) +
theme(legend.position = c(0.5, 0.04),
legend.box = "horizontal",
legend.direction = "horizontal",
legend.box.background = element_rect(fill = "transparent",
colour = "transparent"),
legend.text = element_text(size = 14),
panel.border = element_blank(),
axis.title = element_blank(),
axis.text = element_blank(),
axis.ticks = element_blank(),
plot.margin=unit(c(-0.05,-0.05,-0.05,-0.1),"in"))
DATA
data_box <- tribble(
~xmin, ~xmax, ~ymin, ~ymax,
0, 596.97, 50.5, 446.5,
0, 91.935, 128.975, 368.025,
505.035, 596.97, 128.975, 368.025,
0, 29.858, 195, 302.0,
567.112, 596.97, 195, 302.0
)
data_line <- data.frame(x = 298.485, ymin = 50.5, ymax = 446.5)
data_penalty <- data.frame(x = c(66.33, 530.64), y = rep(248.5, 2))
data_corner <- tribble(
~x0, ~y0, ~start, ~end,
0, 50.5, 0, pi / 2,
0, 446.5, pi, pi /2,
596.97, 50.5, 3 * pi / 2, 2 * pi,
596.97, 446.5, pi, 3 * pi /2
)
data_semi <- tribble(
~x0, ~y0, ~start, ~end,
91.935, 248.5, 0, pi,
505.035, 248.5, pi, 2 * pi
)