| Version: | 0.5.0 |
| Title: | Quiver Plots for 'ggplot2' |
| Description: | An extension of 'ggplot2' to provide quiver plots to visualise vector fields. This functionality is implemented using a geom to produce a new graphical layer, which allows aesthetic options. This layer can be overlaid on a map to improve visualisation of mapped data. |
| Depends: | R (≥ 3.2.0) |
| Imports: | cli, ggplot2 (≥ 3.5.0), grid |
| Suggests: | maps, sf, pkgdown, vdiffr, testthat |
| URL: | https://github.com/mitchelloharawild/ggquiver, https://pkg.mitchelloharawild.com/ggquiver/ |
| BugReports: | https://github.com/mitchelloharawild/ggquiver/issues |
| License: | GPL-3 |
| Encoding: | UTF-8 |
| ByteCompile: | true |
| RoxygenNote: | 7.3.3 |
| NeedsCompilation: | no |
| Packaged: | 2026-08-20 07:36:26 UTC; mitchell |
| Author: | Mitchell O'Hara-Wild [aut, cre] |
| Maintainer: | Mitchell O'Hara-Wild <mail@mitchelloharawild.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-08-20 14:10:22 UTC |
ggquiver: Quiver Plots for 'ggplot2'
Description
An extension of 'ggplot2' to provide quiver plots to visualise vector fields. This functionality is implemented using a geom to produce a new graphical layer, which allows aesthetic options. This layer can be overlaid on a map to improve visualisation of mapped data.
Author(s)
Maintainer: Mitchell O'Hara-Wild mail@mitchelloharawild.com
See Also
Useful links:
Report bugs at https://github.com/mitchelloharawild/ggquiver/issues
Quiver plots for ggplot2
Description
Displays the direction and length of vectors on a graph.
Usage
geom_quiver(
mapping = NULL,
data = NULL,
stat = "quiver",
position = "identity",
center = FALSE,
rescale = FALSE,
vecsize = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE,
...
)
GeomQuiver
stat_quiver(
mapping = NULL,
data = NULL,
geom = "quiver",
position = "identity",
center = FALSE,
rescale = FALSE,
vecsize = NULL,
na.rm = FALSE,
show.legend = NA,
inherit.aes = TRUE,
...
)
StatQuiver
Arguments
mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
stat |
The statistical transformation to use on the data for this layer.
When using a
|
position |
A position adjustment to use on the data for this layer. This
can be used in various ways, including to prevent overplotting and
improving the display. The
|
center |
If |
rescale |
If |
vecsize |
By default (NULL), vectors sizing is automatically determined. If a grid can be identified, they will be scaled to the grid, if not, the vectors will not be scaled. By specifying a numeric input here, the length of all arrows can be adjusted. Setting vecsize to zero will prevent scaling the arrows. |
na.rm |
If |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
... |
Other arguments passed on to
|
geom |
The geometric object to use to display the data for this layer.
When using a
|
Format
An object of class GeomQuiver (inherits from GeomSegment, Geom, ggproto, gg) of length 3.
An object of class StatQuiver (inherits from Stat, ggproto, gg) of length 3.
Vector fields from functions
No special handling is needed to plot the vector field of a mathematical function: u and v are ordinary aesthetics, so a grid of coordinates from expand.grid() can be mapped through them directly, e.g. aes(u = cos(x), v = sin(y)). The automatic grid-based vecsize scaling detects the spacing of the generated grid and sizes the arrows to fit, so the resolution of the grid can be changed freely without arrows overlapping. When u and v are more naturally computed together from a single function(x, y) (for example, a system of differential equations), evaluate it once over the grid and bind the result instead — see the last example below.
Computed variables
- x
centered x start position for velocity arrow
- y
centered y start position for velocity arrow
- xend
centered x end position for velocity arrow
- yend
centered y end position for velocity arrow
Examples
library(ggplot2)
# Quiver plots of mathematical functions
field <- expand.grid(x=seq(0,pi,pi/12), y=seq(0,pi,pi/12))
ggplot(field, aes(x=x,y=y,u=cos(x),v=sin(y))) +
geom_quiver()
# Removing automatic scaling
ggplot(seals, aes(x=long, y=lat, u=delta_long, v=delta_lat)) +
geom_quiver(vecsize=NULL) +
borders("state")
# Vector field from a joint function of x and y
spiral <- function(x, y) data.frame(u = -y - 0.3*x, v = x - 0.3*y)
field <- expand.grid(x=seq(-2,2,length.out=11), y=seq(-2,2,length.out=11))
field <- cbind(field, spiral(field$x, field$y))
ggplot(field, aes(x, y, u=u, v=v)) +
geom_quiver()