R:保存多个 igraph 图
R: Save multiple igraph plots
我有一个函数可以使用 igraph 包创建多个网络图并将网络存储在列表中(g.list 是最终输出)。
该函数如下所示 - 并使用数据帧列表(节点和边)来创建网络。
network.fun <- function(nodes, edges){
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
V(g)$color <- ifelse(V(g)$Treatment == "Water", ff.1[3], ff.1[4])
w1 <- rescale(E(g)$weight, to = c(0,10))
m1 <- layout_nicely(g)
plot(g, vertex.label.color = "black",
edge.color = 'dark grey', edge.width = w1,
layout = m1, vertex.size = 24, vertex.label.font=2,
vertex.label.dist=2.3, vertex.label.degree=4.3)
return(g)
}
g.list <- map(out.list, ~ network.fun(nodes = .x$nodes, edges = .x$edges))
我想知道是否可以在创建每个绘图时将其保存为 png 文件。我创建了 108 个图,因此也希望根据用于创建它们的 nodes/edges 数据框名称来命名这些图。
看起来你不能将 igraph
保存到一个对象,但你可以通过将它包装在 ggsave()
中直接保存绘图,如下所示:
ggsave(paste0(plotName, ".png),
plot(g, vertex.label.color = "black",
edge.color = 'dark grey', edge.width = w1,
layout = m1, vertex.size = 24, vertex.label.font=2,
vertex.label.dist=2.3, vertex.label.degree=4.3),
height = 5, width = 5, dpi = 1000)
您可以向您的函数添加一个 plotName
参数并使用字符串定义它(例如 plotName = "plot_1"
):如果您映射到 out.list
,您可以使用名称out.list
个像这样:
map2(out.list, names(out.list), ~ network.fun(plotName = .y, nodes = .x$nodes, edges = .x$edges))
我有一个函数可以使用 igraph 包创建多个网络图并将网络存储在列表中(g.list 是最终输出)。
该函数如下所示 - 并使用数据帧列表(节点和边)来创建网络。
network.fun <- function(nodes, edges){
g <- graph_from_data_frame(d = edges, vertices = nodes, directed = FALSE)
V(g)$color <- ifelse(V(g)$Treatment == "Water", ff.1[3], ff.1[4])
w1 <- rescale(E(g)$weight, to = c(0,10))
m1 <- layout_nicely(g)
plot(g, vertex.label.color = "black",
edge.color = 'dark grey', edge.width = w1,
layout = m1, vertex.size = 24, vertex.label.font=2,
vertex.label.dist=2.3, vertex.label.degree=4.3)
return(g)
}
g.list <- map(out.list, ~ network.fun(nodes = .x$nodes, edges = .x$edges))
我想知道是否可以在创建每个绘图时将其保存为 png 文件。我创建了 108 个图,因此也希望根据用于创建它们的 nodes/edges 数据框名称来命名这些图。
看起来你不能将 igraph
保存到一个对象,但你可以通过将它包装在 ggsave()
中直接保存绘图,如下所示:
ggsave(paste0(plotName, ".png),
plot(g, vertex.label.color = "black",
edge.color = 'dark grey', edge.width = w1,
layout = m1, vertex.size = 24, vertex.label.font=2,
vertex.label.dist=2.3, vertex.label.degree=4.3),
height = 5, width = 5, dpi = 1000)
您可以向您的函数添加一个 plotName
参数并使用字符串定义它(例如 plotName = "plot_1"
):如果您映射到 out.list
,您可以使用名称out.list
个像这样:
map2(out.list, names(out.list), ~ network.fun(plotName = .y, nodes = .x$nodes, edges = .x$edges))