R: Two-Dimensional Visualization of Graphs

gplot {sna} | R Documentation

## Two-Dimensional Visualization of Graphs

### Description

`gplot` produces a two-dimensional plot of graph `g` in collection `dat`. A variety of options are available to control vertex placement, display details, color, etc.

### Usage

    gplot(dat, g = 1, gmode = "digraph", diag = FALSE,
        label = NULL, coord = NULL, jitter = TRUE, thresh = 0,
        thresh.absval=TRUE, usearrows = TRUE, mode = "fruchtermanreingold",
        displayisolates = TRUE, interactive = FALSE, interact.bycomp = FALSE,
        xlab = NULL, ylab = NULL, xlim = NULL, ylim = NULL, pad = 0.2,
        label.pad = 0.5, displaylabels = !is.null(label), boxed.labels = FALSE,
        label.pos = 0, label.bg = "white", vertex.enclose = FALSE,
        vertex.sides = NULL, vertex.rot = 0, arrowhead.cex = 1, label.cex = 1,
        loop.cex = 1, vertex.cex = 1, edge.col = 1, label.col = 1,
        vertex.col = NULL, label.border = 1, vertex.border = 1, edge.lty = NULL,
        edge.lty.neg=2, label.lty = NULL, vertex.lty = 1, edge.lwd = 0,
        label.lwd = par("lwd"), edge.len = 0.5, edge.curve = 0.1,
        edge.steps = 50, loop.steps = 20, object.scale = 0.01, uselen = FALSE,
        usecurve = FALSE, suppress.axes = TRUE, vertices.last = TRUE,
        new = TRUE, layout.par = NULL, ...)

### Arguments

`dat` | a graph or set thereof. This data may be valued.
`g` | integer indicating the index of the graph which is to be plotted. By default, `g==1`.
`gmode` | String indicating the type of graph being evaluated. `"digraph"` indicates that edges should be interpreted as directed; `"graph"` indicates that edges are undirected; `"twomode"` indicates that data should be interpreted as two-mode (i.e., rows and columns are distinct vertex sets). `gmode` is set to `"digraph"` by default.
`diag` | boolean indicating whether or not the diagonal should be treated as valid data. Set this true if and only if the data can contain loops. `diag` is `FALSE` by default.
`label` | a vector of vertex labels, if desired; defaults to the vertex index number.
`coord` | user-specified vertex coordinates, in an NCOL(dat)x2 matrix. Where this is specified, it will override the `mode` setting.
`jitter` | boolean; should the output be jittered?
`thresh` | real number indicating the lower threshold for tie values. Only ties of value >`thresh` (by default in absolute value - see `thresh.absval`)are displayed. By default, `thresh`=0.
`thresh.absval` | boolean; should the absolute value of edge weights be used when thresholding? (Defaults to TRUE; setting to FALSE leads to thresholding by signed weights.)
`usearrows` | boolean; should arrows (rather than line segments) be used to indicate edges?
`mode` | the vertex placement algorithm; this must correspond to a `gplot.layout` function.
`displayisolates` | boolean; should isolates be displayed?
`interactive` | boolean; should interactive adjustment of vertex placement be attempted?
`interact.bycomp` | boolean; if `interactive==TRUE`, should all vertices in the component be moved?
`xlab` | x axis label.
`ylab` | y axis label.
`xlim` | the x limits (min, max) of the plot.
`ylim` | the y limits of the plot.
`pad` | amount to pad the plotting range; useful if labels are being clipped.
`label.pad` | amount to pad label boxes (if `boxed.labels==TRUE`), in character size units.
`displaylabels` | boolean; should vertex labels be displayed?
`boxed.labels` | boolean; place vertex labels within boxes?
`label.pos` | position at which labels should be placed, relative to vertices. `0` results in labels which are placed away from the center of the plotting region; `1`, `2`, `3`, and `4` result in labels being placed below, to the left of, above, and to the right of vertices (respectively); and `label.pos>=5` results in labels which are plotted with no offset (i.e., at the vertex positions).
`label.bg` | background color for label boxes (if `boxed.labels==TRUE`); may be a vector, if boxes are to be of different colors.
`vertex.enclose` | boolean; should vertices be enclosed within circles? (Can increase legibility for polygonal vertices.)
`vertex.sides` | number of polygon sides for vertices; may be given as a vector, if vertices are to be of different types. By default, 50 sides are used (or 50 and 4, for two-mode data).
`vertex.rot` | angle of rotation for vertices (in degrees); may be given as a vector, if vertices are to be rotated differently.
`arrowhead.cex` | expansion factor for edge arrowheads.
`label.cex` | character expansion factor for label text.
`loop.cex` | expansion factor for loops; may be given as a vector, if loops are to be of different sizes.
`vertex.cex` | expansion factor for vertices; may be given as a vector, if vertices are to be of different sizes.
`edge.col` | color for edges; may be given as a vector or adjacency matrix, if edges are to be of different colors.
`label.col` | color for vertex labels; may be given as a vector, if labels are to be of different colors.
`vertex.col` | color for vertices; may be given as a vector, if vertices are to be of different colors. By default, red is used (or red and blue, for two-mode data).
`label.border` | label border colors (if `boxed.labels==TRUE`); may be given as a vector, if label boxes are to have different colors.
`vertex.border` | border color for vertices; may be given as a vector, if vertex borders are to be of different colors.
`edge.lty` | line type for (positive weight) edges; may be given as a vector or adjacency matrix, if edges are to have different line types.
`edge.lty.neg` | line type for negative weight edges, if any; may be given as per `edge.lty`.
`label.lty` | line type for label boxes (if `boxed.labels==TRUE`); may be given as a vector, if label boxes are to have different line types.
`vertex.lty` | line type for vertex borders; may be given as a vector or adjacency matrix, if vertex borders are to have different line types.
`edge.lwd` | line width scale for edges; if set greater than 0, edge widths are scaled by `edge.lwd*dat`. May be given as a vector or adjacency matrix, if edges are to have different line widths.
`label.lwd` | line width for label boxes (if `boxed.labels==TRUE`); may be given as a vector, if label boxes are to have different line widths.
`edge.len` | if `uselen==TRUE`, curved edge lengths are scaled by `edge.len`.
`edge.curve` | if `usecurve==TRUE`, the extent of edge curvature is controlled by `edge.curv`. May be given as a fixed value, vector, or adjacency matrix, if edges are to have different levels of curvature.
`edge.steps` | for curved edges (excluding loops), the number of line segments to use for the curve approximation.
`loop.steps` | for loops, the number of line segments to use for the curve approximation.
`object.scale` | base length for plotting objects, as a fraction of the linear scale of the plotting region. Defaults to 0.01.
`uselen` | boolean; should we use `edge.len` to rescale edge lengths?
`usecurve` | boolean; should we use `edge.curve`?
`suppress.axes` | boolean; suppress plotting of axes?
`vertices.last` | boolean; plot vertices after plotting edges?
`new` | boolean; create a new plot? If `new==FALSE`, vertices and edges will be added to the existing plot.
`layout.par` | parameters to the `gplot.layout` function specified in `mode`.
`...` | additional arguments to `plot`.

### Details

`gplot` is the standard network visualization tool within the `sna` library. By means of clever selection of display parameters, a fair amount of display flexibility can be obtained. Graph layout – if not specified directly using `coord` – is determined via one of the various available algorithms. These should be specified via the `mode` argument; see `gplot.layout` for a full list. User-supplied layout functions are also possible – see the aforementioned man page for details.

Note that where `gmode=="twomode"`, the supplied two-mode network is converted to bipartite form prior to computing coordinates (if not in that form already). `vertex.col` or other settings may be used to differentiate row and column vertices – by default, row vertices are drawn as red circles, and column vertices are rendered as blue squares. If `interactive==TRUE`, then the user may modify the initial graph layout by selecting an individual vertex and then clicking on the location to which this vertex is to be moved; this process may be repeated until the layout is satisfactory. If `interact.bycomp==TRUE` as well, the vertex and all other vertices in the same component as that vertex are moved together.

### Value

A two-column matrix containing the vertex positions as x,y coordinates.

### Author(s)

Carter T. Butts buttsc@uci.edu

Alex Montgomery ahm@reed.edu

### References

Wasserman, S. and Faust, K. (1994) Social Network Analysis: Methods and Applications. Cambridge: Cambridge University Press.

### See Also

`plot`, `gplot.layout`

### Examples

    gplot(rgraph(5))               #Plot a random graph
    gplot(rgraph(5),usecurv=TRUE)  #This time, use curved edges
    gplot(rgraph(5),mode="mds")    #Try an alternative layout scheme

    #A colorful demonstration...
    gplot(rgraph(5,diag=TRUE),diag=TRUE,vertex.cex=1:5,vertex.sides=3:8,
        vertex.col=1:5,vertex.border=2:6,vertex.rot=(0:4)*72,
        displaylabels=TRUE,label.bg="gray90")

[Package sna version 2.6 Index]