| 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. |
| Authors: | Mitchell O'Hara-Wild [aut, cre] |
| Maintainer: | Mitchell O'Hara-Wild <[email protected]> |
| License: | GPL-3 |
| Version: | 0.5.0.9000 |
| Built: | 2026-10-19 09:09:44 UTC |
| Source: | https://github.com/mitchelloharawild/ggquiver |
Displays the direction and length of vectors on a graph.
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, ... ) StatQuivergeom_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
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
|
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.
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.
centered x start position for velocity arrow
centered y start position for velocity arrow
centered x end position for velocity arrow
centered y end position for velocity arrow
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()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()