Krzysiek - 1 year ago 103
R Question

# Drawing graph G=(V,E) in R

I would like to draw standard G=(V,E) graph in R either by ggplot or some R built-in functions.

I have a data frame containing vertices coords:

``````> V
x        y
1  589.3438 6422.883
2 8762.6921 7789.147
3 7973.0883 4552.745
4 4100.8408 8108.702
5 6049.3329 6547.239
``````

and a zero-one symetric matrix representing edges:

``````> E
[,1] [,2] [,3] [,4] [,5]
[1,]    0    0    0    1    0
[2,]    0    0    1    0    1
[3,]    0    1    0    0    1
[4,]    1    0    0    0    1
[5,]    0    1    1    1    0
``````

I plot vertices using:

``````plotGraph <- function() {
qplot(x,
y,
data=V,
xlim=c(0,SIZE),
ylim=c(0,SIZE),
main="Graph"
)
}
``````

How could I draw graph edges on the same plot? Or how do I plot a single edge from (x1, y1) to (x2, y2)?

Any help would be appreciated.

If using `igraph` is an option, I would recommend it. It's a very useful package when working with graphs. Here's how I would do it using igraph:

``````library(igraph)

# convert V and E to matrices
V <- data.matrix(V)

plot.igraph(g, layout = V)
``````

Alternatively, if you want a ggplot-flavored method, you can use `ggnet2` from the `GGally` package:

``````library(GGally)

V <- data.matrix(V)
# with ggnet2 you don't have to convert E to a graph

ggnet2(net = E, mode = V )
``````

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download