# R igraph manual pages

Use this if you are using igraph from R

## The Fruchterman-Reingold layout algorithm

### Description

Place vertices on the plane using the force-directed layout algorithm by Fruchterman and Reingold.

### Usage

```layout_with_fr(graph, coords = NULL, dim = 2, niter = 500,
start.temp = sqrt(vcount(graph)), grid = c("auto", "grid", "nogrid"),
weights = NULL, minx = NULL, maxx = NULL, miny = NULL, maxy = NULL,
minz = NULL, maxz = NULL, coolexp, maxdelta, area, repulserad, maxiter)

with_fr(...)
```

### Arguments

 `graph` The graph to lay out. Edge directions are ignored. `coords` Optional starting positions for the vertices. If this argument is not `NULL` then it should be an appropriate matrix of starting coordinates. `dim` Integer scalar, 2 or 3, the dimension of the layout. Two dimensional layouts are places on a plane, three dimensional ones in the 3d space. `niter` Integer scalar, the number of iterations to perform. `start.temp` Real scalar, the start temperature. This is the maximum amount of movement alloved along one axis, within one step, for a vertex. Currently it is decreased linearly to zero during the iteration. `grid` Character scalar, whether to use the faster, but less accurate grid based implementation of the algorithm. By default (“auto”), the grid-based implementation is used if the graph has more than one thousand vertices. `weights` A vector giving edge weights. The `weight` edge attribute is used by default, if present. If weights are given, then the attraction along the edges will be multiplied by the given edge weights. `minx` If not `NULL`, then it must be a numeric vector that gives lower boundaries for the ‘x’ coordinates of the vertices. The length of the vector must match the number of vertices in the graph. `maxx` Similar to `minx`, but gives the upper boundaries. `miny` Similar to `minx`, but gives the lower boundaries of the ‘y’ coordinates. `maxy` Similar to `minx`, but gives the upper boundaries of the ‘y’ coordinates. `minz` Similar to `minx`, but gives the lower boundaries of the ‘z’ coordinates. `maxz` Similar to `minx`, but gives the upper boundaries of the ‘z’ coordinates. `coolexp,maxdelta,area,repulserad` These arguments are not supported from igraph version 0.8.0 and are ignored (with a warning). `maxiter` A deprecated synonym of `niter`, for compatibility. `...` Passed to `layout_with_fr`.

### Details

See the referenced paper below for the details of the algorithm.

This function was rewritten from scratch in igraph version 0.8.0.

### Value

A two- or three-column matrix, each row giving the coordinates of a vertex, according to the ids of the vertex ids.

### Author(s)

Gabor Csardi csardi.gabor@gmail.com

### References

Fruchterman, T.M.J. and Reingold, E.M. (1991). Graph Drawing by Force-directed Placement. Software - Practice and Experience, 21(11):1129-1164.

`layout_with_drl`, `layout_with_kk` for other layout algorithms.

Other graph layouts: `add_layout_`; `as_bipartite`, `layout.bipartite`, `layout_as_bipartite`; `as_star`, `layout.star`, `layout_as_star`; `as_tree`, `layout_as_tree`; `component_wise`; `in_circle`, `layout_in_circle`; `layout.auto`, `layout_nicely`, `nicely`; `layout.davidson.harel`, `layout_with_dh`, `with_dh`; `layout.gem`, `layout_with_gem`, `with_gem`; `layout.graphopt`, `layout_with_graphopt`, `with_graphopt`; `layout.grid`, `layout.grid.3d`, `layout.grid.3d`, `layout_on_grid`, `on_grid`; `layout.mds`, `layout_with_mds`, `with_mds`; `layout.merge`, `layout_components`, `merge_coords`, `piecewise.layout`, `piecewise.layout`; `layout.norm`, `norm_coords`; `layout.sugiyama`, `layout_with_sugiyama`, `with_sugiyama`; `layout_on_sphere`, `on_sphere`; `layout_randomly`, `randomly`; `layout_with_kk`, `with_kk`; `layout_with_lgl`, `with_lgl`; `layout`, `layout_`, `print.igraph_layout_modifier`, `print.igraph_layout_spec`; `normalize`

### Examples

```# Fixing ego
g <- sample_pa(20, m=2)
minC <- rep(-Inf, vcount(g))
maxC <- rep(Inf, vcount(g))
minC[1] <- maxC[1] <- 0
co <- layout_with_fr(g, minx=minC, maxx=maxC,
miny=minC, maxy=maxC)
co[1,]
plot(g, layout=co, vertex.size=30, edge.arrow.size=0.2,
vertex.label=c("ego", rep("", vcount(g)-1)), rescale=FALSE,
xlim=range(co[,1]), ylim=range(co[,2]), vertex.label.dist=0,
vertex.label.color="red")
axis(1)
axis(2)
```

[Package igraph version 1.0.0 Index]