Управление эстетикой графиков с помощью igraph в R
У меня есть набор данных, как это:
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 строк (приблизительно) и максимум 10 столбцов. Я использую этот сокращенный набор данных, чтобы проиллюстрировать проблему. Из этого набора данных я использую следующий код для построения потоковой диаграммы (или дерева). -Чарт) используя пакет 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])
Получившийся сюжет прилагается к этому посту.
Используя этот сокращенный набор данных, график выглядит хорошо. Однако, когда используется больший набор данных, события (событие 5, событие 6 и т. Д.) Начинают "накапливаться друг на друге", и диаграмма становится трудночитаемой. Поэтому мне было интересно, есть ли способ для меня контролировать расположение или разделение краев. Также читатель заметит, что метки (все номер 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".
Я прочитал здесь в stackru, что эта ошибка может иметь отношение к некоторой установке остатка tcl/tk 8.5 ( ошибка TCLK, когда я запускаю "validate" из пакета rms), но я проверил, и это не мой случай (так что я понятия не имею, как решить эту ошибку.)
На данном этапе мне нужна помощь специалиста, чтобы контролировать эстетику графика. Подвести итоги:
1-Как я могу контролировать местоположение и / или угол между краями на графике, показанном здесь? Другим вариантом было бы лучше использовать всю поверхность кварцевого графика.
2-Как я могу контролировать расположение меток, связанных с краями?
3- и менее важно, где это tkplot
сообщение об ошибке приходит от?
заранее спасибо