Reputation: 103
The code
library(igraph)
g <- graph.tree(n = 2 ^ 3 - 1, children = 2)
node_labels <- c("", "Group A", "Group B", "(1)Text", "(2)I am a longer text", "(3)I am a long long long text", "(4)X")
lay = layout.reingold.tilford(g)
plot(g,
vertex.size = 4, # node size
vertex.color = '#C4D8E2', # node color
vertex.label = node_labels, # node labels
vertex.label.dist = 5, # node label size
vertex.label.font = 2, # node label type (bold)
vertex.label.degree=0.0,
margin=c(0,0,0,0),
layout=-lay[, 2:1]
)
gives me a graph with labels. How can align the labels 1 .. 4, that they are left aligned, right beside the circle and not center aligned? No 3 is correct from my point of view. Switching to ggraph would be an alternative, but here rotating of labels did not work.
Upvotes: 3
Views: 1542
Reputation: 103
Here the code with the calculation:
library(igraph)
g <- graph.tree(n = 2 ^ 3 - 1, children = 2)
node_labels <- c("", "Group A", "Group B", "(1)Text", "(2)I am a longer text", "(3)I am a long long long text", "(4)X")
lay = layout.reingold.tilford(g)
t1 <- sapply(as.vector( node_labels), FUN = strwidth,units='in')
t2 <- (t1 - min(t1))/ (max(t1) - min(t1))*3+0.9
plot(g,
vertex.size = 4, # node size
vertex.color = '#C4D8E2', # node color
vertex.label = node_labels, # node labels
vertex.label.dist = t2, # node label size
vertex.label.font = 2, # node label type (bold)
vertex.label.degree=0.0,
margin=c(0,0,0,0),
layout=-lay[, 2:1]
)
It is a littlbe bit better, but I can't do it perfectly.
Upvotes: 1
Reputation: 348
If you can manually change the distance for each label like below -
plot(g,
vertex.size = 4,
vertex.color = '#C4D8E2',
vertex.label = node_labels,
vertex.label.dist = c(0,0,0,0,8,12,0), # vector of distance
vertex.label.font = 2,
vertex.label.degree=0.0,
margin=c(0,0,0,0),
layout=-lay[, 2:1]
)
Or you might want to have a function created to get those length from each vertex. This I am leaving on you to improvise.
t1 <- sapply(node_labels, FUN = nchar)
t2 <- (t1 - min(t1))/ (max(t1) - min(t1))
t2 <- t2*12
plot(g,
vertex.size = 4,
vertex.color = '#C4D8E2',
vertex.label = node_labels,
vertex.label.dist = t2, # vector of distance
vertex.label.font = 2,
vertex.label.degree=0.0,
margin=c(0,0,0,0),
layout=-lay[, 2:1]
)
Upvotes: 0