R:可视化文件夹路径

sta*_*oob 3 r

我正在使用 R 编程语言。

我正在尝试制作网络/树可视化,显示位于我的计算机上的所有文件夹、子文件夹和文件。

我发现以下代码可以列出我的计算机上的所有文件/文件夹:

dirs <- list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
Run Code Online (Sandbox Code Playgroud)

从这里,我想制作一个网络图可视化(例如使用 igraph)来显示文件夹、子文件夹和文件的所有路径:

在此输入图像描述 https://www.reddit.com/r/dataisbeautiful/comments/ajcb4n/i_made_a_graph_visualization_of_my_projects/

我在这里找到这篇文章,展示了如何在有限的设置下执行此操作:How to build a dendrogram from a Directory Tree?

但我试图直接为此声明执行此操作

dirs <- list.dirs(path = ".", full.names = TRUE, recursive = TRUE)
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我该怎么做吗?

谢谢!

我的尝试:

library(igraph)
library(data.tree)

dirs <- list.dirs(path = ".", full.names = TRUE, recursive = TRUE)

edges <- data.frame(from = dirname(dirs), to = basename(dirs), stringsAsFactors = FALSE)

g <- graph_from_data_frame(edges, directed=TRUE)

plot(g, layout=layout_as_tree)
Run Code Online (Sandbox Code Playgroud)

bac*_*ned 8

我有几点建议:首先,您的树没有正确生成,因为 dirnames 没有给出目录的名称,而是给出整个名称。

basename您可以通过在 data.frame 的定义中省略该函数来解决此问题edges。这也可能有助于解决重复的文件夹名称。您仍然可以使用以下命令更改名称

V(g)$name <- basename(V(g)$name)
Run Code Online (Sandbox Code Playgroud)

其次,如果您想要所有文件和目录,您的第一行可能应该是

filesAndDirs <- list.files(path = ".", full.names = TRUE, recursive = TRUE, include.dirs = TRUE)
Run Code Online (Sandbox Code Playgroud)

最后,在绘图时,您可能应该添加树的根:

plot(g, layout=layout_as_tree(g, root = 1))
Run Code Online (Sandbox Code Playgroud)

我真的无法帮助制作漂亮的图表,但无论如何我希望这会有所帮助。

整个代码是:

library(igraph)

filesAndDirs <- list.files(path = ".",
                           full.names = TRUE, 
                           recursive = TRUE, 
                           include.dirs = TRUE)

edges <- data.frame(from = dirname(filesAndDirs), to = filesAndDirs, stringsAsFactors = FALSE)

g <- graph_from_data_frame(edges, directed=TRUE)
V(g)$name <- basename(V(g)$name)

plot(g, layout=layout_as_tree(g, root = 1))
Run Code Online (Sandbox Code Playgroud)


All*_*ron 8

您可以使用tidygraph和 来做到这一点ggraph

library(igraph)
library(tidygraph)
library(ggraph)

do.call('rbind', 
  strsplit(dirs, '/') |>
  lapply(\(x) sapply(seq_along(x), \(y) paste(x[1:y], collapse = '/'))) |>
  lapply(\(x) cbind(head(x, -1), tail(x, -1)))
  ) |>
  as.data.frame() |>
  unique() |>
  graph_from_data_frame() |>
  as_tbl_graph() %>%
  mutate(label = gsub('^.*/(.*)$', '\\1', name)) |>
  ggraph(layout = 'tree') + 
  geom_edge_diagonal(color = 'gray') +
  geom_node_point(shape = 21, fill = 'lightblue') +
  geom_node_text(aes(label = label), size = 3, nudge_x = 0.4) +
  coord_flip(clip = 'off') +
  scale_y_reverse() +
  theme_graph()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述