Become an expert in R — Interactive courses, Cheat Sheets, certificates and more!
Get Started for Free

plot.network

Two-Dimensional Visualization for Network Objects


Description

plot.network produces a simple two-dimensional plot of network x, using optional attribute attrname to set edge values. A variety of options are available to control vertex placement, display details, color, etc.

Usage

## S3 method for class 'network'
plot(x, ...)

## Default S3 method:
plot.network(x, attrname = NULL, 
   label = network.vertex.names(x), coord = NULL, jitter = TRUE,
   thresh = 0, usearrows = TRUE, mode = "fruchtermanreingold", 
   displayisolates = TRUE, interactive = FALSE, xlab = NULL, 
   ylab = NULL, xlim = NULL, ylim = NULL, pad = 0.2, label.pad = 0.5,
   displaylabels = !missing(label), boxed.labels = FALSE, label.pos = 0,
   label.bg = "white", vertex.sides = 50, vertex.rot = 0, vertex.lwd=1,
   arrowhead.cex = 1, label.cex = 1, loop.cex = 1, vertex.cex = 1,
   edge.col = 1, label.col = 1, vertex.col = 2, label.border = 1,
   vertex.border = 1, edge.lty = 1, label.lty = NULL, vertex.lty = 1,
   edge.lwd = 0, edge.label = NULL, edge.label.cex = 1,
   edge.label.col = 1, 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

x

an object of class network.

...

additional arguments to plot.

attrname

an optional edge attribute, to be used to set edge values.

label

a vector of vertex labels, if desired; defaults to the vertex labels returned by network.vertex.names. If label has one element and it matches with a vertex attribute name, the value of the attribute will be used. Note that labels may be set but hidden by the displaylabels argument.

coord

user-specified vertex coordinates, in an network.size(x)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 are displayed. By default, thresh=0.

usearrows

boolean; should arrows (rather than line segments) be used to indicate edges?

mode

the vertex placement algorithm; this must correspond to a network.layout function.

displayisolates

boolean; should isolates be displayed?

interactive

boolean; should interactive adjustment of vertex placement be attempted?

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

number of polygon sides for vertices; may be given as a vector or a vertex attribute name, if vertices are to be of different types. As of v1.12, radius of polygons are scaled so that all shapes have equal area

vertex.rot

angle of rotation for vertices (in degrees); may be given as a vector or a vertex attribute name, if vertices are to be rotated differently.

vertex.lwd

line width of vertex borders; may be given as a vector or a vertex attribute name, if vertex borders are to have different line widths.

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 or a vertex attribute name, if loops are to be of different sizes.

vertex.cex

expansion factor for vertices; may be given as a vector or a vertex attribute name, if vertices are to be of different sizes.

edge.col

color for edges; may be given as a vector, adjacency matrix, or edge attribute name, if edges are to be of different colors.

label.col

color for vertex labels; may be given as a vector or a vertex attribute name, if labels are to be of different colors.

vertex.col

color for vertices; may be given as a vector or a vertex attribute name, if vertices are to be of different colors.

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 or a vertex attribute name, if vertex borders are to be of different colors.

edge.lty

line type for edge borders; may be given as a vector, adjacency matrix, or edge attribute name, if edge borders are to have different line types.

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 a vertex attribute name, 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, adjacency matrix, or edge attribute name, if edges are to have different line widths.

edge.label

if non-NULL, labels for edges will be drawn. May be given as a vector, adjacency matrix, or edge attribute name, if edges are to have different labels. A single value of TRUE will use edge ids as labels. NOTE: currently doesn't work for curved edges.

edge.label.cex

character expansion factor for edge label text; may be given as a vector or a edge attribute name, if edge labels are to have different sizes.

edge.label.col

color for edge labels; may be given as a vector or a edge attribute name, if labels are to be of different colors.

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, adjacency matrix, or edge attribute name, 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 network.layout function specified in mode.

Details

plot.network is the standard visualization tool for the network class. By means of clever selection of display parameters, a fair amount of display flexibility can be obtained. Vertex 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 network.layout for a full list. User-supplied layout functions are also possible – see the aforementioned man page for details.

Note that where is.hyper(x)==TRUE, the network is converted to bipartite adjacency form prior to computing coordinates. If interactive==TRUE, then the user may modify the initial network 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.

Value

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

Note

plot.network is adapted (with minor modifications) from the gplot function of the sna library (authors: Carter T. Butts and Alex Montgomery); eventually, these two packages will be integrated.

Author(s)

Carter T. Butts buttsc@uci.edu

References

Butts, C. T. (2008). “network: a Package for Managing Relational Data in R.” Journal of Statistical Software, 24(2). https://www.jstatsoft.org/v24/i02/

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

See Also

Examples

#Construct a sparse graph
m<-matrix(rbinom(100,1,1.5/9),10)
diag(m)<-0
g<-network(m)

#Plot the graph
plot(g)

#Load Padgett's marriage data
data(flo)
nflo<-network(flo)
#Display the network, indicating degree and flagging the Medicis
plot(nflo, vertex.cex=apply(flo,2,sum)+1, usearrows=FALSE,
    vertex.sides=3+apply(flo,2,sum),
    vertex.col=2+(network.vertex.names(nflo)=="Medici"))

network

Classes for Relational Data

v1.16.1
GPL (>= 2)
Authors
Carter T. Butts [aut, cre], David Hunter [ctb], Mark Handcock [ctb], Skye Bender-deMoll [ctb], Jeffrey Horner [ctb], Li Wang [ctb]
Initial release
2020-10-06

We don't support your browser anymore

Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.