3

我有一个这样的数据集:

final.Df
       X1     X2        X3
1  event1 event2 event5.n1
2  event1 event2 event5.n1
3  event1 event2 event6.n1
4  event1 event3 event6.n2
5  event1 event3 event7.n2
6  event1 event3 event7.n2
7  event1 event4 event7.n3
8  event1 event4 event7.n3
9  event1 event4 event8.n3
10 event1 event4 event8.n3 

(原始数据可能包括最多 200 行(aprox)和最多 10 列。我使用这个简化的数据集来说明问题。从这个数据集中,我使用以下代码绘制流程图(或树-Chart)使用igraphR 中的包(下面的代码部分基于从 R 中的选项卡式文本创建树形图):

##create edges 
edges <- rbind(na.omit(final.Df[1:2]),
           do.call('rbind',
                   lapply(1:(ncol(final.Df)-2), function(i) 
                          na.omit(setNames(final.Df[(1+i):(2+i)],
                                           names(final.Df[1:2]))))))

##remove duplicated edges.
rm.ind <- c()
for (i in 2:nrow(edges)){
    if (edges[i,1] == edges[i-1,1] & edges[i,2] == edges[i-1,2]){
        rm.ind <- c(rm.ind, i) 
    }
}
edges <- edges[-rm.ind,]

## create graph
require(igraph)
g <- graph.data.frame(edges)
E(g)$curved <- 0
E(g)$label <- rep(1, nrow(edges))
plot.igraph(g, vertex.size=0, edge.arrow.size=0 ,
                  layout=-layout.reingold.tilford(g)[,2:1])

结果图附在这篇文章中。

使用这个简化的数据集,绘图看起来不错。但是,当使用更大的数据集时,事件(event5、event6 等)开始“相互叠加”,图表变得难以阅读。因此,我想知道是否有办法控制边缘的位置或分离。读者也会注意到标签(在这种情况下都是数字 1)落在边缘的顶部。理想情况下,我希望标签落在边缘之上(我已经读过一些使用 package qgraph,但我假设可以使用igraph(?) 来完成所有操作)

我尝试使用tkplot,因为您似乎能够控制结果图的大小,但我收到以下错误:

tkplot(g, canvas.width=450, canvas.height=450, vertex.size=0, edge.arrow.size=0 ,
                   layout=-layout.reingold.tilford(g)[,2:1])
Loading required package: tcltk
Error in structure(.External(.C_dotTclObjv, objv), class = "tclObj") : 
  [tcl] expected integer but got "font266".

我在stackoverflow上读到这个错误可能与一些残余的tcl/tk 8.5安装有关(当我从rms包运行'validate'时出现TCLK错误),但我已经检查过了,这不是我的情况(所以不知道如何解决这个错误。)

在这个阶段,我需要一些专家的帮助来控制图表的美感。总结一下:

1-如何控制此处显示的图中边缘之间的位置和/或角度?另一种选择是更好地使用石英绘图窗口的整个表面。

2-如何控制与边缘关联的标签的位置?

3 次重要,此tkplot错误消息来自哪里?

提前致谢

4

0 回答 0