我有这样的数据集:
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列。我使用这个简化数据集来说明问题。从这个数据集我使用下面的代码绘制流程图(或树图表)使用R中的包igraph
(下面的代码部分基于Creating treechart from tabbed text in 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等)开始于#34;堆叠在彼此之上&#34;并且图表变得难以阅读。因此,我想知道是否有办法控制边缘的位置或分离。此外,读者会注意到标签(在这种情况下,所有数字1)都落在边缘的顶部。理想情况下,我希望标签超出边缘(我已经读过一些使用包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安装(TCLK error when I run 'validate' from the rms package)有关,但是我已经检查过,这不是我的情况(所以不知道如何解决这个问题)错误。)
在这个阶段,我需要一些专家帮助来控制图形图的美学。总结一下:
1 - 如何在此处显示的图中控制边缘之间的位置和/或角度?另一个选择是更好地使用石英绘图窗口的整个表面。
2 - 如何控制与边缘相关的标签的位置?
3-而且不太重要,此tkplot
错误消息来自哪里?
提前致谢