Nothing
## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
## ----setup, echo=FALSE--------------------------------------------------------
suppressPackageStartupMessages({
library(ggarrow)
library(grid)
})
## ----illustrate_head, echo = FALSE--------------------------------------------
arrow_grob <- grob_arrow(
x = unit(c(0.2, 0.8), "npc"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = arrow_head_wings(),
arrow_fins = arrow_fins_feather(),
length_head = unit(10, "mm"),
length_fins = unit(14.4, "mm"),
shaft_width = unit(2, "mm")
)
grid.newpage()
grid.draw(arrow_grob)
grid.lines(
x = unit(0.8, "npc") - unit(c(0, 0, 1.44, 1.44), "cm"),
y = unit(0.5, "npc") + unit(1, "cm") + unit(c(-0.2, 0, 0, -0.2), "cm")
)
grid.text(
c("start", "end", "arrow_head"),
x = unit(c(0.1, 0.9, 0.8), "npc") - unit(c(0, 0, 0.72), "cm"),
y = unit(c(0.5, 0.5, 0.5), "npc") + unit(c(0, 0, 1.5), "cm")
)
## ----illustrate_head_wings, echo = FALSE--------------------------------------
arr <- arrow_head_wings() * 40
arr[, "x"] <- arr[, "x"] - 11.2
arrow_grob <- grob_arrow(
x = unit(0.5, "npc") + unit(c(-28.8, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"),
length_head = unit(40, "mm"),
shaft_width = unit(5, "mm"),
gp = gpar(fill = NA)
)
grid.newpage()
grid.points(
x = unit(0.5, "npc") + unit(c(-11.2, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"), pch = 16, gp = gpar(col = alpha(2, 0.5))
)
grid.lines(
x = unit(0.5, "npc") + unit(c(-11.2, -11.2, 28.8, 28.8), "mm"),
y = unit(0.5, "npc") + unit(c(0, -2, -2, 0), "cm"),
gp = gpar(col = alpha(2, 0.5))
)
grid.text(
x = unit(0.5, "npc") + unit(8.8, "mm"),
y = unit(0.5, "npc") - unit(2, "cm"),
label = "length_head", gp = gpar(col = 2),
vjust = 2
)
grid.lines(
x = unit(0.5, "npc") + unit(c(0, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"),
gp = gpar(col = 3)
)
arc <- seq(pi, pi - 20 * pi / 180, length.out = 30)
grid.polyline(
x = unit(0.5, "npc") + unit(28.8, "mm") + unit(cos(arc) * 16, "mm"),
y = unit(0.5, "npc") + unit(sin(arc) * 16, "mm"),
gp = gpar(col = 3)
)
grid.text(
x = unit(0.5, "npc") + unit(9.4, "mm"),
y = unit(0.5, "npc"), label = "offset", gp = gpar(col = 3),
vjust = -0.5, hjust = 1
)
arc <- seq(2 * pi - 20 * pi / 180, 2 * pi - 50 * pi / 180, length.out = 30)
grid.polyline(
x = unit(0.5, "npc") + unit(cos(arc) * 10, "mm") + unit(arr[2, "x"], "mm"),
y = unit(0.5, "npc") + unit(sin(arc) * 10, "mm") + unit(arr[2, "y"], "mm"),
gp = gpar(col = 4)
)
grid.text(
x = unit(0.5, "npc") + unit(arr[2, "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[2, "y"], "mm"),
label = "inset", gp = gpar(col = 4), hjust = -0.5, vjust = -0.5
)
grid.draw(arrow_grob)
## ----echo=FALSE---------------------------------------------------------------
offset <- c(20, 30, 90, 45, 135)
inset <- c(30, 60, 60, 90, 30)
y <- 4:0
descr <- c(" (default)", "", "", "", "")
example_plot <- ggplot(mapping = aes(x = c(0, 1))) +
coord_cartesian(clip = "off") +
scale_y_continuous(limits = c(-0.5, 4.5)) +
scale_x_continuous(limits = c(-0.1, 1.1)) +
theme_void()
example_plot +
geom_vline(xintercept = 1, colour = "tomato") +
annotation_custom(
grid::segmentsGrob(
x0 = unit(0, "npc") - unit(10, "mm"),
x1 = unit(0, "npc") - unit(10, "mm"),
gp = grid::gpar(col = "dodgerblue")
),
xmin = 1, xmax = 1
) +
lapply(seq_along(y), function(i) {
geom_arrow(
aes(y = c(y[i], y[i])), linewidth = 2,
arrow_head = arrow_head_wings(offset = offset[i], inset = inset[i]),
length_head = unit(10, "mm")
)
}) +
annotate(
"text", x = 0.5, y = y + 0.5, label = paste0(
"offset = ", offset, ", inset = ", inset, descr
)
)
## ----illustrate_head_line, echo = FALSE---------------------------------------
arr <- arrow_head_line()
arr <- arr(40, 5)
arr[, "x"] <- arr[, "x"] + 18.8
arrow_grob <- grob_arrow(
x = unit(0.5, "npc") + unit(c(-28.8, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"),
length_head = unit(40, "mm"),
shaft_width = unit(5, "mm"),
arrow_head = arrow_head_line(),
gp = gpar(fill = NA)
)
arrow1 <- arrow2 <- arrow3 <- arrow_grob
arrow1$arrow_head <- arrow_head_line(lineend = "square")
arrow2$arrow_head <- arrow_head_line(lineend = "parallel")
arrow3$arrow_head <- arrow_head_line(lineend = "round")
arrow2$gp <- arrow3$gp <- arrow1$gp <- gpar(lwd = 0.5, col = 3, fill = NA)
grid.newpage()
grid.points(
x = unit(0.5, "npc") + unit(arr[1:2, "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[1:2, "y"], "mm"),
gp = gpar(col = 2, alpha = 0.5), pch = 16
)
angle <- 30 * pi / 180 - 0.5 * pi
grid.lines(
x = unit(0.5, "npc") + unit(arr[c(1, 1, 2, 2), "x"], "mm") +
unit(cos(angle) * c(0, 1, 1, 0) * 0.5, "cm"),
y = unit(0.5, "npc") + unit(arr[c(1, 1, 2, 2), "y"], "mm") +
unit(sin(angle) * c(0, 1, 1, 0) * 0.5, "cm"),
gp = gpar(col = 2, alpha = 0.5)
)
grid.draw(arrow1)
grid.draw(arrow2)
grid.draw(arrow3)
grid.text(
x = unit(0.5, "npc") + unit(arr[6, "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[6, "y"], "mm"),
label = "lineend", gp = gpar(col = 3), vjust = -0.5
)
grid.text(
x = unit(0.5, "npc") + unit(mean(arr[1:2, "x"]), "mm") +
unit(cos(angle) * 0.5, "cm"),
y = unit(0.5, "npc") + unit(mean(arr[1:2, "y"]), "mm") +
unit(sin(angle) * 0.5, "cm"),
label = "length_head", rot = 30, gp = gpar(col = 2), vjust = 1.5
)
angle <- pi - 30 * pi / 180
grid.lines(
x = unit(0.5, "npc") + unit(cos(c(angle, angle, pi)) * c(30, 0, 30), "mm") +
unit(28.8 - 2.5 / sin(angle), "mm"),
y = unit(0.5, "npc") + unit(sin(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
gp = gpar(col = 4)
)
angle <- seq(angle, pi, length.out = 30)
grid.lines(
x = unit(0.5, "npc") + unit(cos(angle) * 20, "mm") +
unit(28.8 - 2.5 / sin(angle[1]), "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 20, "mm"),
gp = gpar(col = 4)
)
grid.text(
x = unit(0.5, "npc") - unit(10, "mm"),
y = unit(0.5, "npc"), label = "angle", gp = gpar(col = 4),
vjust = -1.5, hjust = 0
)
grid.draw(arrow_grob)
## ----echo=FALSE---------------------------------------------------------------
angle <- c(30, 30, 90, 30, 135)
lineend <- c("butt", "round", "square", "parallel", "butt")
y <- 4:0
descr <- c(" (default)", "", "", "", "")
example_plot +
geom_vline(xintercept = 1, colour = "tomato") +
lapply(seq_along(y), function(i) {
geom_arrow(
aes(y = c(y[i], y[i])), linewidth = 2,
arrow_head = arrow_head_line(angle = angle[i], lineend = lineend[i]),
length_head = unit(10, "mm")
)
}) +
annotate(
"text", x = 0.5, y = y + 0.5, label = paste0(
"angle = ", angle, ", lineend = ", lineend, descr
)
)
## ----illustrate_head_minimal, echo = FALSE------------------------------------
arrow_grob <- grob_arrow(
x = unit(0.5, "npc") + unit(c(-28.8, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = arrow_head_minimal(),
length_head = unit(40, "mm"),
shaft_width = unit(10, "mm"),
gp = gpar(fill = NA)
)
grid.newpage()
angle <- pi - 45 / 180 * pi
grid.lines(
x = unit(0.5, "npc") + unit(28.8, "mm") +
unit(cos(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
y = unit(0.5, "npc") + unit(sin(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
gp = gpar(col = alpha(2, 0.5))
)
angle <- seq(angle, pi, length.out = 30)
grid.lines(
x = unit(0.5, "npc") + unit(cos(angle) * 20, "mm") + unit(28.8, "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 20, "mm"),
gp = gpar(col = alpha(2, 0.5))
)
grid.text(
x = unit(0.5, "npc") - unit(10, "mm"),
y = unit(0.5, "npc"), label = "angle", gp = gpar(col = 2),
vjust = -3, hjust = -0.5
)
grid.draw(arrow_grob)
## ----echo=FALSE---------------------------------------------------------------
angle <- c(45, 45, 90, 135, 5)
width <- c(5, 2, 5, 5, 5)
y <- 4:0
descr <- c(" (default)", "", "", "", "")
example_plot +
geom_vline(xintercept = 1, colour = "tomato") +
lapply(seq_along(y), function(i) {
geom_arrow(
aes(y = c(y[i], y[i])), linewidth = width[i],
arrow_head = arrow_head_minimal(angle = angle[i]),
length_head = unit(0, "mm")
)
}) +
annotate(
"text", x = 0.5, y = y + 0.5, label = paste0(
"angle = ", angle, ", linewidth = ", width, descr
)
)
## ----illustrate_fins, echo = FALSE--------------------------------------------
arrow_grob <- grob_arrow(
x = unit(c(0.2, 0.8), "npc"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = arrow_head_wings(),
arrow_fins = arrow_fins_feather(),
length_head = unit(10, "mm"),
length_fins = unit(14.4, "mm"),
shaft_width = unit(2, "mm")
)
grid.newpage()
grid.draw(arrow_grob)
grid.lines(
x = unit(0.2, "npc") + unit(c(0, 0, 1.44, 1.44), "cm"),
y = unit(0.5, "npc") + unit(1, "cm") + unit(c(-0.2, 0, 0, -0.2), "cm")
)
grid.text(
c("start", "end", "arrow_fins"),
x = unit(c(0.1, 0.9, 0.2), "npc") + unit(c(0, 0, 0.72), "cm"),
y = unit(c(0.5, 0.5, 0.5), "npc") + unit(c(0, 0, 1.5), "cm")
)
## ----illustrate_fins_feather, echo = FALSE------------------------------------
arr <- arrow_fins_feather()
arr <- arr * 50
arr[, "x"] <- -1 * arr[, "x"] + 21.2
arrow_grob <- grob_arrow(
x = unit(0.5, "npc") + unit(c(-28.8, 28.8), "mm"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = NULL, arrow_fins = arrow_fins_feather(),
length_fins = unit(50, "mm"),
shaft_width = unit(5, "mm"),
gp = gpar(fill = NA)
)
mc <- makeContent(arrow_grob)
grid.newpage()
grid.points(
x = unit(0.5, "npc") + unit(arr[4:5, "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[4:5, "y"], "mm"),
gp = gpar(col = 3, alpha = 0.5), pch = 16
)
grid.lines(
x = unit(0.5, "npc") + unit(arr[c(4, 4, 5, 5), "x"], "mm"),
y = unit(0.5, "npc") + unit(c(arr[4, "y"], c(-20, -20), arr[5, "y"]), "mm"),
gp = gpar(col = 3, alpha = 0.5)
)
grid.text(
x = unit(0.5, "npc") + unit(mean(arr[4:5, "x"]), "mm"),
y = unit(0.5, "npc") + unit(-20, "mm"),
label = "outdent", gp = gpar(col = 3), vjust = 1.5
)
grid.points(
x = unit(0.5, "npc") + unit(arr[c(1, 6), "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[c(1, 6), "y"], "mm"),
gp = gpar(col = 4, alpha = 0.5), pch = 16
)
grid.lines(
x = unit(0.5, "npc") + unit(arr[c(1, 1, 6, 6), "x"], "mm"),
y = unit(0.5, "npc") + unit(c(arr[1, "y"], c(-20, -20), arr[6, "y"]), "mm"),
gp = gpar(col = 4, alpha = 0.5)
)
grid.text(
x = unit(0.5, "npc") + unit(mean(arr[c(1, 6), "x"]), "mm"),
y = unit(0.5, "npc") + unit(-20, "mm"),
label = "indent", gp = gpar(col = 4), vjust = 1.5
)
grid.points(
x = unit(0.5, "npc") + unit(arr[c(2, 4), "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[c(2, 4), "y"], "mm"),
gp = gpar(col = 2, alpha = 0.5), pch = 16
)
grid.lines(
x = unit(0.5, "npc") + unit(arr[c(2, 2, 4, 4), "x"], "mm"),
y = unit(0.5, "npc") + unit(c(arr[2, "y"], c(20, 20), arr[4, "y"]), "mm"),
gp = gpar(col = 2, alpha = 0.5)
)
grid.text(
x = unit(0.5, "npc") + unit(mean(arr[c(2, 4), "x"]), "mm"),
y = unit(0.5, "npc") + unit(20, "mm"),
label = "length_fins", gp = gpar(col = 2), vjust = -0.5
)
grid.points(
x = unit(0.5, "npc") + unit(arr[1:2, "x"], "mm"),
y = unit(0.5, "npc") + unit(arr[1:2, "y"], "mm"),
gp = gpar(col = 6, alpha = 0.5), pch = 16
)
grid.lines(
x = unit(0.5, "npc") + unit(c(arr[1, "x"], -35, -35, arr[2, "x"]), "mm"),
y = unit(0.5, "npc") + unit(arr[c(1, 1, 2, 2), "y"], "mm"),
gp = gpar(col = 6, alpha = 0.5)
)
grid.text(
x = unit(0.5, "npc") - unit(35, "mm"),
y = unit(0.5, "npc") + unit(mean(arr[1:2, "y"]), "mm"), rot = 90,
label = "height", gp = gpar(col = 6), vjust = -0.5
)
grid.draw(arrow_grob)
## ----example_fins_feather, echo=FALSE-----------------------------------------
indent <- c(0.3, 0, 0.3, 0.3, -0.3)
outdent <- c(0.3, 0.3, 0, 0.3, -0.3)
height <- c(0.5, 0.5, 0.5, 1, 0.5)
y <- 4:0
descr <- c(" (default)", "", "", "", "")
example_plot +
geom_vline(xintercept = 0, colour = "tomato") +
annotation_custom(
grid::segmentsGrob(
x0 = unit(0, "npc") + unit(10, "mm"),
x1 = unit(0, "npc") + unit(10, "mm"),
gp = grid::gpar(col = "dodgerblue")
),
xmin = 0, xmax = 0
) +
lapply(seq_along(y), function(i) {
geom_arrow(
aes(y = c(y[i], y[i])), linewidth = 2, arrow_head = NULL,
arrow_fins = arrow_fins_feather(
indent = indent[i], outdent = outdent[i], height = height[i]
),
length_fins = unit(10, "mm")
)
}) +
annotate(
"text", x = 0.5, y = y + 0.5, label = paste0(
"indent = ", indent, ", outdent = ", outdent, ", height = ", height, descr
)
)
## ----illustrate_fins_line, echo = FALSE---------------------------------------
arr <- arrow_fins_line()
arr <- arr(40, 5)
# arr <- arr * 50
arrow_grob <- grob_arrow(
x = unit(c(0.5, 0.7), "npc"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = NULL, arrow_fins = arrow_fins_line(),
length_fins = unit(40, "mm"),
shaft_width = unit(5, "mm"),
justify = 1,
gp = gpar(fill = NA)
)
arrow1 <- arrow2 <- arrow3 <- arrow_grob
arrow1$arrow_fins <- arrow_fins_line(lineend = "square")
arrow2$arrow_fins <- arrow_fins_line(lineend = "parallel")
arrow3$arrow_fins <- arrow_fins_line(lineend = "round")
arrow2$x[1] <- arrow2$x[1] - unit(10, "mm")
arrow2$gp <- arrow3$gp <- arrow1$gp <- gpar(lwd = 0.5, col = 3, fill = NA)
grid.newpage()
grid.points(
x = unit(0.5, "npc") - unit(arr[3:4, "x"], "mm"),
y = unit(0.5, "npc") - unit(arr[3:4, "y"], "mm"),
gp = gpar(col = 2, alpha = 0.5), pch = 16
)
angle <- 30 * pi / 180
grid.lines(
x = unit(0.5, "npc")- unit(cos(c(angle, angle, pi)) * c(30, 0, -30), "mm") -
unit(5, "mm"),
# x = unit(0.5, "npc") + unit(cos(c(angle, angle, pi)) * c(30, 0, 30), "mm") +
# unit(28.8 - 2.5 / sin(angle), "mm"),
y = unit(0.5, "npc") + unit(sin(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
gp = gpar(col = 4)
)
grid.draw(arrow1)
grid.draw(arrow2)
grid.draw(arrow3)
grid.text(
x = unit(0.5, "npc") - unit(arr[6, "x"], "mm"),
y = unit(0.5, "npc") - unit(arr[6, "y"], "mm"),
label = "lineend", gp = gpar(col = 3), vjust = -1
)
angle <- seq(pi - angle, pi, length.out = 30)
grid.lines(
x = unit(0.5, "npc") + unit((cos(angle) * 20) - 5, "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 20, "mm"),
gp = gpar(col = 4)
)
grid.text(
x = unit(0.5, "npc") - unit(33, "mm"),
y = unit(0.5, "npc"), label = "angle", gp = gpar(col = 4),
vjust = -1.5
)
.halfpi <- 0.5 * pi
angle <- 30 * pi / 180
grid.lines(
x = unit(0.5, "npc") - unit(arr[c(3,3,4,4), "x"], "mm") +
unit(c(0, cos(.halfpi - angle[c(1, 1)]), 0), "cm"),
y = unit(0.5, "npc") - unit(arr[c(3,3,4,4), "y"], "mm") -
unit(c(0, sin(.halfpi - angle[c(1, 1)]), 0), "cm"),
gp = gpar(col = 2, alpha = 0.5)
)
grid.text(
x = unit(0.5, "npc") - unit(mean(arr[3:4, "x"]), "mm") +
unit(cos(.halfpi - angle) * 1, "cm"),
y = unit(0.5, "npc") - unit(mean(arr[3:4, "y"]), "mm") -
unit(sin(.halfpi - angle) * 1, "cm"),
label = "length_fins", rot = 30,
gp = gpar(col = 2), vjust = 1.5
)
grid.draw(arrow_grob)
## ----echo=FALSE---------------------------------------------------------------
angle <- c(30, 30, 30, 30, 135)
lineend <- c("butt", "round", "square", "parallel", "butt")
y <- 4:0
descr <- c(" (default)", "", "", "", "")
example_plot +
geom_vline(xintercept = 0, colour = "tomato") +
lapply(seq_along(y), function(i) {
geom_arrow(
aes(y = c(y[i], y[i])), linewidth = 2, arrow_head = NULL,
arrow_fins = arrow_fins_line(angle = angle[i], lineend = lineend[i]),
length_fins = unit(10, "mm")
)
}) +
annotate(
"text", x = 0.5, y = y + 0.5, label = paste0(
"angle = ", angle, ", lineend = ", lineend, descr
)
)
## ----illustrate_fins_minimal, echo = FALSE------------------------------------
angle <- 45
arrow_grob <- grob_arrow(
x = unit(0.5, "npc") + unit(c(-0.1, 0.1), "npc"),
y = unit(c(0.5, 0.5), "npc"),
arrow_fins = arrow_fins_minimal(angle),
arrow_head = NULL,
length_fins = unit(40, "mm"),
shaft_width = unit(10, "mm"),
gp = gpar(fill = NA)
)
grid.newpage()
grid.draw(arrow_grob)
angle <- .halfpi + angle / 180 * pi
grid.lines(
x = unit(0.4, "npc") + unit(c(0, 0, cos(angle)) * 30, "mm"),
y = unit(0.5, "npc") + unit(c(1, 0, sin(angle)) * 30, "mm"),
# x = unit(0.5, "npc") + unit(cos(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
# y = unit(0.5, "npc") + unit(sin(c(angle, angle, pi)) * c(30, 0, 30), "mm"),
gp = gpar(col = alpha(2, 0.5))
)
angle <- seq(angle, .halfpi, length.out = 30)
grid.lines(
x = unit(0.4, "npc") + unit(cos(angle) * 20, "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 20, "mm"),
gp = gpar(col = alpha(2, 0.5))
)
grid.text(
x = unit(0.4, "npc") - unit(10, "mm"),
y = unit(0.5, "npc") + unit(25, "mm"),
label = "angle", gp = gpar(col = 2)
)
## ----echo=FALSE---------------------------------------------------------------
ggplot(mapping = aes(x = c(0, 1))) +
geom_vline(xintercept = 0, colour = "tomato") +
geom_arrow(
aes(y = c(4, 4)), linewidth = 5, arrow_head = NULL,
arrow_fins = arrow_fins_minimal(angle = 45)
) +
annotate(
"text", x = 0.5, y = 4.5, label = "angle = 45 (default)"
) +
geom_arrow(
aes(y = c(3, 3)), linewidth = 2, arrow_head = NULL,
arrow_fins = arrow_fins_minimal(angle = 45)
) +
annotate(
"text", x = 0.5, y = 3.5, label = "angle = 45, linewidth = 2"
) +
geom_arrow(
aes(y = c(2, 2)), linewidth = 5, arrow_head = NULL,
arrow_fins = arrow_fins_minimal(angle = 0)
) +
annotate(
"text", x = 0.5, y = 2.5, label = "angle = 0"
) +
geom_arrow(
aes(y = c(1, 1)), linewidth = 5, arrow_head = NULL,
arrow_fins = arrow_fins_minimal(angle = 135)
) +
annotate(
"text", x = 0.5, y = 1.5, label = "angle = 135"
) +
geom_arrow(
aes(y = c(0, 0)), linewidth = 5, arrow_head = NULL,
arrow_fins = arrow_fins_minimal(angle = 70)
) +
annotate(
"text", x = 0.5, y = 0.5, label = "angle = 70"
) +
coord_cartesian(clip = "off") +
scale_y_continuous(limits = c(-0.5, 4.5)) +
scale_x_continuous(limits = c(-0.1, 1.1)) +
theme_void()
## ----illustrate_cups, echo = FALSE--------------------------------------------
arr <- arrow_cup(angle = 90)
arr <- arr(1, 4, 10)
arrow_grob <- grob_arrow(
x = unit(c(0.1, 0.4), "npc"),
y = unit(c(0.5, 0.5), "npc"),
arrow_head = arrow_cup(angle = 90),
length_head = unit(30, "mm"),
resect_head = unit(20, "mm"),
shaft_width = unit(10, "mm"),
gp = gpar(fill = NA)
)
arrow1 <- arrow_grob
arrow1$x <- unit(c(0.9, 0.6), "npc")
arrow1$arrow_head <- arrow_cup(lineend = "butt")
arrow2 <- arrow1
arrow2$arrow_head <- arrow_cup(lineend = "round")
arrow2$gp <- gpar(col = 3, fill = NA)
grid.newpage()
grid.points(
x = unit(c(0.4, 0.4, 0.6, 0.6), "npc") - unit(c(0, 20, 0, -20), "mm"),
y = unit(c(0.5, 0.5, 0.5, 0.5), "npc"),
gp = gpar(col = 2, alpha = 0.5), pch = 16
)
grid.polyline(
x = unit(c(0.4, 0.4, 0.6, 0.6), "npc") - unit(c(0, 20, 0, -20), "mm"),
y = unit(c(0.5, 0.5, 0.5, 0.5), "npc"), id.lengths = c(2,2),
gp = gpar(col = 2, alpha = 0.5)
)
grid.text(
x = unit(c(0.4, 0.6), "npc") - unit(c(10, -10), "mm"),
y = unit(c(0.5, 0.5), "npc"),
label = "resect",
vjust = -0.5,
gp = gpar(col = 2)
)
angle <- 90 / 180 * pi
grid.lines(
x = unit(0.4, "npc") + unit(c(cos(0.5 * angle + pi) * 40, 0,
cos(-0.5 * angle + pi) * 40), "mm"),
y = unit(0.5, "npc") + unit(c(sin(0.5 * angle + pi) * 40, 0,
sin(-0.5 * angle + pi) * 40), "mm"),
gp = gpar(col = 4, alpha = 0.5)
)
angle <- seq(-0.5, 0.5, length.out = 20) * angle + pi
grid.lines(
x = unit(0.4, "npc") + unit(cos(angle) * 35, "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 35, "mm"),
gp = gpar(col = 4, alpha = 0.5)
)
grid.text(
x = unit(0.4, "npc") + unit(cos(90 / 180 * pi * 0.25 + pi) * 40 - 5, "mm"),
y = unit(0.5, "npc") + unit(sin(90 / 180 * pi * 0.25 + pi) * 40, "mm"),
label = "angle", gp = gpar(col = 4)
)
angle <- 30 / 20
angle <- seq(-0.5, 0.5, length.out = 20) * angle + pi
grid.lines(
x = unit(0.6, "npc") - unit(cos(angle) * 25, "mm"),
y = unit(0.5, "npc") + unit(sin(angle) * 25, "mm"),
gp = gpar(col = 4, alpha = 0.5)
)
grid.text(
x = unit(0.6, "npc") + unit(25, "mm"),
y = unit(0.5, "npc") + unit(10, "mm"),
label = "length_head", gp = gpar(col = 4),
hjust = 0
)
grid.text(
x = unit(0.6, "npc") + unit(5, "mm"),
y = unit(0.3, "npc"),
label = "lineend",
gp = gpar(col = 3)
)
grid.draw(arrow2)
grid.draw(arrow1)
grid.draw(arrow_grob)
## ----echo = FALSE-------------------------------------------------------------
ggplot(mapping = aes(x = c(0, 1))) +
geom_vline(xintercept = 1, colour = "tomato") +
annotate(
"point", x = 1, y = 0:4, colour = "tomato", size = 5, shape = 16
) +
geom_arrow(
aes(y = c(4, 4)), linewidth = 3,
arrow_head = arrow_cup(), resect_head = 5,
length_head = 5
) +
annotate(
"text", x = 0.5, y = 4.5, label = "length_head = 5, resect_head = 5"
) +
geom_arrow(
aes(y = c(3, 3)), linewidth = 3,
arrow_head = arrow_cup(), resect_head = 10,
length_head = 5
) +
annotate(
"text", x = 0.5, y = 3.5, label = "length_head = 5, resect_head = 10"
) +
geom_arrow(
aes(y = c(2, 2)), linewidth = 3,
arrow_head = arrow_cup(), resect_head = 2.5,
length_head = 5
) +
annotate(
"text", x = 0.5, y = 2.5, label = "length_head = 5, resect_head = 2.5"
) +
geom_arrow(
aes(y = c(1, 1)), linewidth = 3,
arrow_head = arrow_cup(angle = 90, lineend = "butt"), resect_head = 5,
length_head = 5
) +
annotate(
"text", x = 0.5, y = 1.5,
label = "angle = 90, resect_head = 2.5, lineend = 'butt'"
) +
geom_arrow(
aes(y = c(0, 0)), linewidth = 3,
arrow_head = arrow_cup(angle = 360), resect_head = 2.5,
length_head = 5
) +
annotate(
"text", x = 0.5, y = 0.5,
label = "angle = 360, resect_head = 2.5"
) +
coord_cartesian(clip = "off") +
scale_y_continuous(limits = c(-0.5, 4.5)) +
scale_x_continuous(limits = c(-0.1, 1.1)) +
theme_void()
## -----------------------------------------------------------------------------
ggplot(mtcars, aes(disp, mpg)) +
geom_point(aes(colour = factor(cyl))) +
geom_arrow_curve(
data = ~ subset(.x, rownames(.x) == "Hornet 4 Drive"),
aes(xend = 300, yend = 25),
arrow_fins = arrow_cup(angle = 360), resect_fins = 1.5
) +
annotate(
"text", x = 300, y = 25,
label = "Hornet 4 Drive",
vjust = -1
)
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.