Вы можете определить свои собственные фигуры: https://igraph.org/r/doc/shapes.html, а пример точки с пунктирной границей дан на https://r.789695.n4.nabble.com/Drawing-a-dotted-circle-td4655331.html. Полный пример создания новой фигуры на https://lists.gnu.org/archive/html/igraph-help/2013-03/msg00030.html. Также см. Больше примеров на ?add_shape
. Приведенный ниже пример настраивает код из lists.gnu.org для объединения всего.
Функция для создания новой igraph
фигуры
myimg <- function(coords, v=NULL, params) {
vertex.color <- params("vertex", "color")
if (length(vertex.color) != 1 && !is.null(v)) {
vertex.color <- vertex.color[v]
}
vertex.size <- 1/200 * params("vertex", "size")
if (length(vertex.size) != 1 && !is.null(v)) {
vertex.size <- vertex.size[v]
}
vertex.frame.color <- params("vertex", "frame.color")
if (length(vertex.frame.color) != 1 && !is.null(v)) {
vertex.frame.color <- vertex.frame.color[v]
}
vertex.frame.width <- params("vertex", "frame.width")
if (length(vertex.frame.width) != 1 && !is.null(v)) {
vertex.frame.width <- vertex.frame.width[v]
}
ltype <- params("vertex", "ltype")
if (length(ltype) != 1 && !is.null(v)) {
ltype <- ltype[v]
}
mapply(coords[,1], coords[,2], vertex.color, vertex.frame.color,
vertex.size, vertex.frame.width, ltype,
FUN=function(x, y, bg, fg, size, lwd, lty) {
symbols(x=x, y=y, bg=bg, fg=fg, lwd=lwd, lty=lty,
circles=size, add=TRUE, inches=FALSE)
})
}
Затем вы заставляете igraph
распознавать фигуру, используя add_shape
. Вы устанавливаете значения параметров по умолчанию с помощью аргумента parameters
.
library(igraph)
g <- make_undirected_graph(edges = c(1, 3, 2, 1, 2, 4, 3, 4, 4, 5), n = 5)
add_shape("myimg", plot=myimg,
parameters = list(
vertex.frame.color=1,
vertex.frame.width=1,
vertex.ltype=1))
Затем строите график
plot(g, vertex.shape="myimg",
vertex.frame.color=1:5,
vertex.frame.width=5,
vertex.ltype=1:5,
vertex.color=6:10,
vertex.size=seq(50, 80, length=5))
Чтобы получить все границы пунктирными, используйте vertex.ltype="dotted"
или vertex.ltype=3
.