R:可视化文件夹路径

ev7lccsx  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(116)

我正在使用R编程语言。

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

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

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

字符串
从这里,我想制作一个网络图可视化(例如使用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)


有人能教我怎么做吗?
谢谢你,谢谢

我的尝试:

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)

m1m5dgzv

m1m5dgzv1#

你可以使用tidygraphggraph来实现:

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()

字符串


的数据

avwztpqn

avwztpqn2#

我有几个要点:首先,你的树没有正确地生成,因为dirnames没有给予目录的名称,而是整个名称。
您可以通过在edges data.frame的定义中省略basename函数来解决此问题。这也可能有助于处理重复的文件夹名称。您仍然可以使用

V(g)$name <- basename(V(g)$name)

字符串
第二,如果你想拥有所有的文件和目录,你的第一行可能应该是

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


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

plot(g, layout=layout_as_tree(g, root = 1))


我真的不能帮助制作一个漂亮的图表,但我希望这无论如何都能有所帮助。
整个代码是:

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))

相关问题