These functions provide convenient ggplot2 layers for drawing vector fields using streamlines.
geom_vector_field(
mapping = NULL,
data = NULL,
stat = StatStreamField,
position = "identity",
...,
na.rm = FALSE,
show.legend = NA,
inherit.aes = FALSE,
fun,
xlim = NULL,
ylim = NULL,
n = 11,
args = list(),
center = TRUE,
normalize = TRUE,
tail_point = FALSE,
eval_point = FALSE,
grid = NULL,
lineend = "butt",
linejoin = "round",
linemitre = 10,
arrow = grid::arrow(angle = 30, length = unit(0.02, "npc"), type = "closed")
)stat_vector_field(
mapping = NULL,
data = NULL,
stat = StatStreamField,
geom = GeomStream,
position = "identity",
...,
na.rm = FALSE,
show.legend = NA,
inherit.aes = FALSE,
fun,
xlim = NULL,
ylim = NULL,
n = 11,
args = list(),
center = TRUE,
normalize = TRUE,
tail_point = FALSE,
eval_point = FALSE,
grid = NULL,
lineend = "butt",
linejoin = "round",
linemitre = 10,
arrow = grid::arrow(angle = 30, length = unit(0.02, "npc"), type = "closed")
)
geom_vector_field2(
mapping = NULL,
data = NULL,
stat = StatStreamField,
position = "identity",
...,
na.rm = FALSE,
show.legend = TRUE,
inherit.aes = FALSE,
fun,
xlim = NULL,
ylim = NULL,
n = 11,
args = list(),
center = FALSE,
tail_point = TRUE,
eval_point = FALSE,
grid = NULL,
lineend = "butt",
linejoin = "round",
linemitre = 10,
arrow = NULL
)
stat_vector_field2(
mapping = NULL,
data = NULL,
geom = GeomStream,
position = "identity",
...,
na.rm = FALSE,
show.legend = TRUE,
inherit.aes = FALSE,
fun,
xlim = NULL,
ylim = NULL,
n = 11,
args = list(),
center = FALSE,
tail_point = TRUE,
eval_point = FALSE,
grid = NULL,
lineend = "butt",
linejoin = "round",
linemitre = 10,
arrow = NULL
)
A ggplot2 layer that computes and plots a vector field using streamlines.
Calculated as the Euclidean distance between the starting point
(x, y) and the computed endpoint. Used to normalize the
vector.
A set of aesthetic mappings created by ggplot2::aes().
Additional aesthetics such as color, size, linetype, and alpha can
be defined. In
geom_vector_field, the default mapping includes color = after_stat(norm),
whereas in geom_vector_field2 the default mapping includes length = after_stat(norm).
A data frame containing the input data.
The statistical transformation to use on the data for this layer. Defaults to StatStreamField.
Position adjustment, either as a string or the result of a call to a position adjustment function.
Other arguments passed on to grid::layer().
Logical. If FALSE (the default), missing values are removed
with a warning.
Logical. Should this layer be included in the legends?
Logical. If FALSE, overrides the default aesthetics
rather than combining with them.
A function that defines the vector field. It should take a numeric vector of length 2 (representing \((x, y)\)) and return a numeric vector of length 2 (representing \((dx, dy)\)). (Required)
Numeric vector of length two. Specifies the limits of the x-axis
domain. Defaults to c(-1, 1).
Numeric vector of length two. Specifies the limits of the y-axis
domain. Defaults to c(-1, 1).
Integer. Grid resolution specifying the number of seed points along
each axis. Higher values produce a denser vector field. Defaults to 11.
List of additional arguments passed on to the function defined by
fun.
Logical. If TRUE, centers the seed points or the vectors so
that the original (x, y) becomes the midpoint. Defaults differ between the
variants.
Logical. If TRUE, stream lengths are normalized based on
grid spacing. If FALSE, a default arc length is used. (Default is TRUE;
if TRUE, it is converted internally to "vector".)
Logical. If TRUE, a point is drawn at the tail of each
streamline.
Logical. If TRUE, a point is drawn at the evaluation
point, corresponding to the original (untransformed) seed point before any
centering or normalization is applied.
A data frame containing precomputed grid points for seed
placement. If NULL (default), a regular Cartesian grid is generated based
on xlim, ylim, and n.
Line end style (round, butt, square).
Line join style (round, mitre, bevel).
Line mitre limit (number greater than 1).
A grid::arrow() specification to add arrowheads to the
streamlines. In geom_vector_field, the default is a closed arrow with a
30° angle and length 0.02 npc; in geom_vector_field2 the default is
NULL.
The geometric object used to render the streamline (only used in
stat_stream(); defaults to GeomStream).
geom_vector_field() and geom_vector_field2()
understand the following aesthetics (required aesthetics are in bold):
x: The x-coordinate of the vector's starting point.
y: The y-coordinate of the vector's starting point.
fx: The horizontal component of the vector displacement.
fy: The vertical component of the vector displacement.
color: The color of the vector lines (default mapping in geom_vector_field).
length: The computed vector norm (default mapping in geom_vector_field2).
linetype: The type of the vector line (e.g., solid, dashed).
linewidth: The thickness of the vector line.
alpha: The transparency of the vector.
A user-defined function (fun) specifies the behavior of the vector field by
taking a numeric vector of length 2 (representing \((x, y)\)) and returning
a numeric vector of length 2 (representing \((dx, dy)\)). The underlying
StatStreamField computes the streamlines based on the vector field
function, and GeomStream renders them.
Two variants are provided:
geom_vector_field() uses a default mapping that sets color = after_stat(norm).
geom_vector_field2() uses a default mapping that sets length = after_stat(norm)
(with color unmapped by default).
geom_stream_field()
f <- function(u) c(-u[2], u[1])
ggplot() + geom_vector_field(fun = f, xlim = c(-1,1), ylim = c(-1,1))
# \donttest{
# xlim and ylim default to (-1,1), so for ease of illustration we remove them
ggplot() + geom_vector_field(fun = f)
ggplot() + geom_vector_field(fun = f, grid = "hex")
ggplot() + geom_vector_field2(fun = f)
ggplot() + geom_vector_field2(fun = f, grid = "hex")
f <- efield_maker()
ggplot() + geom_vector_field(fun = f, xlim = c(-2,2), ylim = c(-2,2))
ggplot() + geom_vector_field2(fun = f, xlim = c(-2,2), ylim = c(-2,2))
# }
Run the code above in your browser using DataLab