我当前正在try 修改一个字形对象.我使用以下代码创建布局:

graph <- igraph::graph_from_data_frame(d=edge, vertices = nodes, directed = FALSE)

V(graph)$color <- ifelse(nodes[V(graph), 2] == "A", "red",
                         ifelse(nodes[V(graph), 2] == "B", "blue", "white"))
V(graph)$layer <- ifelse(V(graph)$TYPE == "B",2, ifelse(V(graph)$TYPE == "C", 1,3))

plot_layout <- layout_with_sugiyama(graph, layers = V(graph)$layer)

plot(graph, layout = plot_layout, vertex.size = 5,
      vertex.label = NA,
     vertex.label.dist = 0, vertex.label.cex = 0.6,
     vertex.label.color = "black",
     edge.curved = 0.2, edge.width = 1, edge.color=adjustcolor("grey", 0.3))

The result is the following : Plot Result

问题是,当我为类型为A和C的 node 添加标签时,它们是不可读的,因为 node 彼此太近了.您知道一种方法,可以只将第一层和第三层中的 node 转换为圆弧,而不是直线或间隔 node 吗?

我try 使用ggraph来使用ggrepel来避免标签重叠,但无法使用ggraph中的3层Sugiyama.

谢谢你的帮助.

推荐答案

可以通过以下代码将在iggraph中创建的布局用于ggraph:

#adding the layout and trying to use ggraph and ggrepel to avoid overlap
plot_layout <- as.data.frame(plot_layout[["layout"]]) 
plot_layout <- rename(plot_layout, x = V1, y= V2)
graph <- create_layout(graph, plot_layout) 

这使我能够使用ggrepel(geom_text_resil())来获得像样的文本批注布局.

R相关问答推荐

如何使用Cicerone指南了解R Shiny中传单 map 的元素?

有没有一种方法可以在子包上使用‘library()’中的‘exclub’参数?

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

在ggplot Likert条中添加水平线

查找具有平局的多个列的最大值并返回列名或平局 destruct 者NA值

为什么st_join(ob1,ob2,left = True)返回具有比ob1更多功能的sf对象?

使用R中的Shapetime裁剪格栅文件

如何对数据集进行逆向工程?

从R导出全局环境中的所有sf(numrames)对象

如何在emmeans中计算连续变量的对比度

par函数中的缩写,比如mgp,mar,mai是如何被破译的?

使用外部文件分配变量名及其值

在ggplot中为不同几何体使用不同的 colored颜色 比例

打印XTS对象

将Posict转换为数字时的负时间(以秒为单位)

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

图中显示错误 colored颜色 的图例geom_sf

从字符串01JAN2021创建日期

将y轴格式更改为R中的百分比