【问题标题】:R igraph: Color Vertices by column contentR igraph:按列内容着色顶点
【发布时间】:2017-06-15 17:57:00
【问题描述】:

我正在使用 igraph 从 SQL Server 绘制图表。我提供了一个 3 列的表作为输入:

from   to     color
Node1  NodeA  red
Node1  NodeB  green
Node1  NodeC  blue
Node2  NodeD  red
Node2  NodeE  green

我的 R 脚本如下所示:

require(igraph)
g <- graph.data.frame(graphdf)
V(g)$label.cex <- 2
png(filename = "'+@outputFile+'", height = 3000, width = 3000, res = 100);
plot(g, vertex.label.family = "sans", vertex.size = 5)
dev.off()

绘图的边缘将以所需的颜色显示,但顶点本身不会 - 理想情况下,我希望“到”顶点是“颜色”列中指示的颜色。我不关心'from'的颜色(它可以是默认的橙色)。

我已经尝试添加这个(和变体):

V(g)$color <- graphdf[V(g), 3]

在 png 行之前,但这会产生看似随机的顶点颜色。

【问题讨论】:

    标签: r igraph sql-server-2017


    【解决方案1】:

    这取决于您创建 graphdf 的方式。列是字符串还是因子?我将展示这两种情况的解决方案。

    graphdf 包含字符串

    library(igraph)
    
    ## Create data 
    graphdf = read.table(text="from   to     color
    Node1  NodeA  red
    Node1  NodeB  green
    Node1  NodeC  blue
    Node2  NodeD  red
    Node2  NodeE  green",
    header=TRUE, stringsAsFactors=FALSE)
    g <- graph.data.frame(graphdf)
    

    我将所有节点设为橙色,然后调整目标节点的颜色。

    ## Make default color orange
    V(g)$color = "orange"
    V(g)[graphdf$to]$color = graphdf$color
    

    graphdf 包含因子

    如果您允许所有字符串都成为因素,则更麻烦的情况是。这里唯一的区别是你必须在使用它们时将as.character 应用于所有因子。

    graphdf = read.table(text="from   to     color
    Node1  NodeA  red
    Node1  NodeB  green
    Node1  NodeC  blue
    Node2  NodeD  red
    Node2  NodeE  green",
    header=TRUE)
    g <- graph.data.frame(graphdf)
    
    V(g)$color = "orange"
    V(g)[as.character(graphdf$to)]$color = as.character(graphdf$color)
    plot(g)
    

    【讨论】:

    • 数据是从 SQL SELECT 提供的,并作为 sp_execute_external_script 的参数,所以我不知道它是否包含因素。事实证明确实如此,第二个解决方案效果很好。谢谢!
    • 顺便说一句,str(graphdf) 会告诉你它们是字符串还是因子。
    猜你喜欢
    • 2018-04-14
    • 2013-04-06
    • 1970-01-01
    • 2021-12-01
    • 2013-07-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-20
    • 1970-01-01
    相关资源
    最近更新 更多