使用 plotly 或 Network 3D 将 igraph 转换为交互式绘图

Posted

技术标签:

【中文标题】使用 plotly 或 Network 3D 将 igraph 转换为交互式绘图【英文标题】:Convert ggraph to interative plot with plotyly or Network3D 【发布时间】:2020-10-20 20:47:59 【问题描述】:

我正在寻找将ggraph 对象转换为迭代力网络的示例或教程。

首先我尝试使用plotly::ggplotly 函数转换为plotly 对象。但似乎plotly 不能很好地处理这种转换并错过了边缘。

但我找到了network3D,我可以将igraph 对象转换为network3D 对象,但这不是我想要的。而且这个包的功能太冗长了。无论如何,没有从ggraph对象转换的函数。

所以,我的问题确实很基础,但是...您知道创建交互式ggraph 网络的任何方法吗?

谢谢

【问题讨论】:

【参考方案1】:

试试ggiraph 包,它可以与ggraph 一起使用,您可以在示例here(页面底部)中看到。

供将来参考(如果上面的链接可能失效),这里是 ggiraph 的示例(不是我的代码):

library(ggraph)
library(igraph)
library(ggiraph)

actors <- data.frame(
  name = c("Alice", "Bob", "Cecil", "David", "Esmeralda"),
  age = c(48,33,45,34,21),
  gender = c("F","M","F","M","F")
)
relations <- data.frame(
  from = c("Bob", "Cecil", "Cecil", "David", "David", "Esmeralda"),
  to = c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
  same.dept = c(FALSE,FALSE,TRUE,FALSE,FALSE,TRUE),
  friendship = c(4,5,5,2,1,1),
  advice = c(4,5,5,4,2,3)
)

g <- graph_from_data_frame(relations,
       directed = TRUE, vertices = actors)

z <- ggraph(g, layout = 'linear', circular = TRUE) +
  geom_edge_arc(color = "red", edge_width = .2) +
  geom_point_interactive(size = 5,
    mapping = aes(x = x, y = y, data_id = gender,
                  tooltip = paste0(name, ": ", age, "y.o."))
  ) + theme_graph()

girafe(ggobj = z, width_svg = 5, height_svg = 5,
       options = list(opts_sizing(rescale = FALSE)))

plotly 好像还不支持ggraph,不过你可以追踪进度here。

【讨论】:

以上是关于使用 plotly 或 Network 3D 将 igraph 转换为交互式绘图的主要内容,如果未能解决你的问题,请参考以下文章

使用 Plotly.js 在 3D 图中绘制 2D 平面

使用“Plots.jl”将 2d 函数绘制为 3d 空间中的曲面

R语言plotly可视化:使用UMAP算法将数据降维到三维并使用plotly可视化降维后的数据(project data into 3D with UMAP and px.scatter_3d)

R语言plotly可视化:使用TSNE算法将数据降维到三维并使用plotly可视化降维后的数据(project data into 3D with t-SNE and px.scatter_3d)

Plotly 3D 绘图注释

在 Plotly 中将回归平面添加到 3d 散点图