Given a graph, vertices' positions and sizes, calculates the absolute positions of the endpoints of the edges considering the plot's aspect ratio.
edges_coords(graph, toa, x, y, vertex_cex, undirected = TRUE,
no_contemporary = TRUE, dev = as.numeric(c()),
ran = as.numeric(c()), curved = as.logical(c()))
A square matrix of size
Integer vector of size
Numeric vector of size
Numeric vector of size
Numeric vector of size symbols
).
Logical scalar. Whether the graph is undirected or not.
Logical scalar. Whether to return (compute) edges' coordiantes for vertices with the same time of adoption (see details).
Numeric vector of size 2. Height and width of the device (see details).
Numeric vector of size 2. Range of the x and y axis (see details).
Logical vector.
A numeric matrix of size
Edge origin
Edge target
Relative angle between (x0,y0)
and (x1,y1)
in terms
of radians
In order to make the plot's visualization more appealing, this function provides a straight forward way of computing the tips of the edges considering the aspect ratio of the axes range. In particular, the following corrections are made at the moment of calculating the egdes coords:
Instead of using the actual distance between ego and alter, a relative
one is calculated as follows
Then, for the relative elevation angle, alpha
, the relative distance
Finally, the edge's endpoint's (alter) coordinates are computed as follows:
The same process (with sign inverted) is applied to the edge starting piont.
The resulting values, arrows
. This is the workhorse function used in plot_threshold
.
The dev
argument provides a reference to rescale the plot accordingly
to the device, and former, considering the size of the margins as well (this
can be easily fetched via par("pin")
, plot area in inches).
On the other hand, ran
provides a reference for the adjustment
according to the range of the data, this is range(x)[2] - range(x)[1]
and range(y)[2] - range(y)[1]
respectively.
# NOT RUN {
# --------------------------------------------------------------------------
data(medInnovationsDiffNet)
library(sna)
# Computing coordinates
set.seed(79)
coords <- sna::gplot(as.matrix(medInnovationsDiffNet$graph[[1]]))
# Getting edge coordinates
vcex <- rep(1.5, nnodes(medInnovationsDiffNet))
ecoords <- edges_coords(
medInnovationsDiffNet$graph[[1]],
diffnet.toa(medInnovationsDiffNet),
x = coords[,1], y = coords[,2],
vertex_cex = vcex,
dev = par("pin")
)
ecoords <- as.data.frame(ecoords)
# Plotting
symbols(coords[,1], coords[,2], circles=vcex,
inches=FALSE, xaxs="i", yaxs="i")
with(ecoords, arrows(x0,y0,x1,y1, length=.1))
# }
Run the code above in your browser using DataLab