【问题标题】:Unexpected arrow color behavior with semi-transparent edges (igraph, R)具有半透明边缘的意外箭头颜色行为(igraph,R)
【发布时间】:2016-05-04 13:06:26
【问题描述】:

使用 R 中的 igraph 包,我遇到了以下意外行为。如果图形的edge.arrow.mode(在我的情况下是无向的,但没有区别)被指定为3(或"<->",两端的箭头),并且edge.color 被指定为rgb()选项alpha < 1,箭头变为不同颜色。看起来一端有两个箭头,重叠会产生更深的颜色。

这是不可取的,因为它会使图表中的某些箭头比其他箭头更暗(看起来更“重要”)。我试图可视化的实际图形是无向的,(所有灰色,半透明)边缘末端的箭头仅用于说明特定顶点有多少连接(图形非常大(100-500 vertices),具有重叠的边,因此很难直观地确定边与顶点的连接位置;这也是使用半透明边和顶点的原因。

以下是一些工作示例:

library("igraph")
plot(make_tree(5, mode="undirected"), vertex.size=10, edge.arrow.mode=3, edge.color=rgb(0,0,0,0.2))
plot(make_tree(5, mode="undirected"), vertex.size=10, edge.arrow.mode=3, edge.color=rainbow(5, alpha=0.3))

问题是,有没有办法解决这个问题,所以箭头看起来都一样?

还可以考虑以其他方式直观地显示顶点连接的数量(最好是“方向”)(但请注意,顶点颜色(全色谱)已用于另一种视觉辅助,并且顶点最重要的是边缘着色会使事情变得太彩虹了)。更改顶点形状以指示连接程度也不是一个好的解决方案(编辑 - 感谢 Tad)。将所有箭头设为纯色也可以(但似乎没有办法将箭头颜色与边缘颜色分开更改)。

(奖励:这是 igraph 的错误还是功能?)

【问题讨论】:

    标签: r graph transparency visualization igraph


    【解决方案1】:

    您能简单地根据节点度数更改顶点大小吗?

    grph <- make_tree(5, mode="undirected")
    plot(grph, vertex.size=degree(grph)*5, edge.arrow.mode=0, 
         edge.color='black')
    

    还可以更改边缘的厚度 (edge.width),这可以让您了解加权网络中的节点强度。不过,这并不适用。

    编辑: 改变颜色的 alpha 通道怎么样,使得更透明的节点的度数更小?除此之外,我很茫然。一般而言,在无向图上放置箭头似乎是个坏主意,尤其是当它只是作为可视化节点度数的一种手段时。

    colShift <-    function(x, alpha){
                            x <- col2rgb(x) / 255
                            rgb(x[1], x[2], x[3], alpha=alpha)  
                         }
    
    grph <- make_tree(5, mode="undirected") %>%
          set_vertex_attr('color', value='dodgerblue4')
    
    vertAlpha <- 1.1 - 1/degree(grph)
    vertColor <- colShift(vertex_attr(grph, 'color'), vertAlpha)
    
    V(grph)$color <- vertColor
    
    plot(grph, vertex.size=degree(grph)*5, edge.arrow.mode=0, 
         edge.color='black')
    

    【讨论】:

    • 它适用于较小的网络且没有标签,但我有 100-500 个顶点,每个顶点都有一个由三位数组成的短标签(总是)。调整顶点大小将导致标签部分保持在顶点形状之外,以获得较少连接的顶点,我想避免这种情况(并且调整文本大小可能使其不可读),而超连接顶点会覆盖太多已经拥挤的网络情节。我将编辑问题以包含该约束。
    • 评论编辑。感谢您提出更多想法。不幸的是,顶点 alpha 在我的情况下效果不佳,因为顶点颜色信息量很大。我正在使用rgb() 的所有三个值,因此白色背景上的低 alpha 会误导性地使顶点看起来像它具有浅色(或在所有三个颜色通道上接近 1 的值)。由于网络代表社会关系,没有箭头或有两个箭头在语义上是等价的;这不是问题。两端只需要看起来相同/相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    • 1970-01-01
    • 2016-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-02
    相关资源
    最近更新 更多