r - 向 data.tree 对象添加“填充”属性以用于 R 中的 collapsibleTree
问题描述
我们一直在使用数据collapsibleTree()
框来制作交互式、漂亮的分层系统树状图。但是我们遇到的问题是,在使用数据框时很难获得我们想要的自定义,并且从collapsibleTree
文档看来,使用 data.tree 结构提供了更大的灵活性。例如,如果我们想用数据框为特定节点着色,我们需要做这样的事情:
library(dplyr)
library(data.tree)
library(collapsibleTree)
colors <- rep('gray', 15)
colors[1] <- 'red' # root
colors[3] <- 'red' # child we want to emphasize
colors[15] <- 'red' # grand child we want to emphasize
original_data_frame %>%
collapsibleTree(
hierarchy = c("level_2",
"level_3",
"level_4",
"level_5",
"level_6",
"level_7"
),
root = "level_1",
fill = colors
)
这并不是一个真正好的解决方案,尤其是当生成的树有数百个或更多节点或更高级别的层次结构时。
我在data.tree中看到,我应该可以添加任意属性,但这似乎不起作用,至少它没有达到我想要的效果:
original_as_tree <- original_data_frame %>%
mutate(pathString =
paste(
level_1,
level_2,
level_3,
level_4,
level_5,
level_6,
level_7,
sep = "/"),
pathString = str_remove_all(pathString, "/NA")) %>%
as.Node()
original_as_tree$color <- "gray"
original_as_tree$Boat$color <- "red"
collapsibleTree(original_as_tree,
fill = original_as_tree$color)
这只是将每个节点着色为“灰色”(如果我这样做了,则为红色original_as_tree$Boat$color
)。理想情况下,我可以通过某种case_when
或ifelse
调用以编程方式分配颜色。
这是我的示例数据的输出:
structure(list(level_1 = c("Sea System", "Sea System", "Sea System",
"Sea System", "Sea System", "Sea System"), level_2 = c("System Engineering",
"Boat", "Boat", "Boat", "Boat", "Boat"), level_3 = c("Core Systems Engineering",
"Auxiliary Systems", "Total Ship Integration/Engineering", "Electric Plant",
"Hull Structure", "Hull Structure"), level_4 = c(NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_, NA_character_
), level_5 = c(NA_character_, NA_character_, NA_character_, NA_character_,
NA_character_, NA_character_), level_6 = c(NA_character_, NA_character_,
NA_character_, NA_character_, NA_character_, NA_character_),
level_7 = c("GREENLAND ENTERPRISES, INC.", "3M PURIFICATION INC.",
"5TH AXIS, LLC", "901 D, LLC", "A. M. CASTLE & CO.", "A.M. CASTLE & CO."
)), row.names = c(NA, -6L), class = c("tbl_df", "tbl", "data.frame"
解决方案
推荐阅读
- java - 使用 amazon SES SMTP 接口发送电子邮件后如何获得响应?
- python - 如何为 numpy 数组“x”实现函数 f(x) = { x^2, x>0 和 -x^2 , x<0 }?
- html - 订单列表的浮动图像和文本换行
- postgresql - 将 ISO8601 日期文本转换为时间戳
- json - 如何从 Swift 中的 JSON 文件中读取混合类型的数组?
- import - Power BI - 批量导入/导出措施
- python - 将文件中每一行的第三个单词分配给 Python 中的列表
- ios - iOS - 本地化字符串在 pod 中不起作用
- c# - 使用c#时如何防止VS Code自动导入
- ios - Firebase 无法检测仅用于 Apple 登录 (IOS) 的经过身份验证的用户