我有一个这样的数据集:
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)使用igraph
R 中的包(下面的代码部分基于从 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
错误消息来自哪里?
提前致谢