Управление эстетикой графиков с помощью 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 сообщение об ошибке приходит от?

заранее спасибо

0 ответов

Другие вопросы по тегам