【问题标题】:Visualisation iGraph and label alignment可视化 iGraph 和标签对齐
【发布时间】:2018-12-08 15:52:18
【问题描述】:

代码

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]
)

给我一​​个带有标签的图表。如何对齐标签 1 .. 4,它们左对齐,在圆圈旁边而不是中心对齐?从我的角度来看,第 3 项是正确的。切换到 ggraph 是一种替代方法,但这里的标签轮换不起作用。

【问题讨论】:

    标签: r label igraph text-alignment vertex


    【解决方案1】:

    这里是计算代码:

    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]
    )
    

    稍微好一点,但我不能完美地做到这一点。

    【讨论】:

      【解决方案2】:

      如果您可以手动更改每个标签的距离,如下所示 -

      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]
      )
      

      或者您可能希望创建一个函数来从每个顶点获取这些长度。这个我留给你即兴发挥。

      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]
      )
      

      【讨论】:

      • 嗨 Vikash,我会选择这个功能,但我认为这将取决于所使用的字体。我必须找到一些东西来确定字符串的长度。
      • 正确,取决于字体。字体对于所有标签都是全局的。您可以考虑使用我提供的替代解决方案来计算字符并用于获取距离向量。您可以通过增加 t2*15 或减少 t2*6 来更改乘法 -> t2*12。希望这会有所帮助!
      • 这真的很奇怪。我不让它工作。我试图计算字符串的宽度,但它不能完美地工作。
      猜你喜欢
      • 2021-07-27
      • 1970-01-01
      • 2011-05-11
      • 1970-01-01
      • 2018-07-22
      • 2013-07-28
      • 2022-12-10
      • 2014-09-04
      • 2012-10-24
      相关资源
      最近更新 更多