`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.

```
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, ...)
```

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`

.

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

`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.

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

```
# NOT RUN {
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")
# }
```

Run the code above in your browser using DataLab