【问题标题】:Problem ordering in "arcplot" with all the attributes in R使用 R 中的所有属性在“arcplot”中排序问题
【发布时间】:2021-06-15 19:07:37
【问题描述】:

我正在尝试使用 arcdiagram 包内的 arcplot 函数创建一个弧形图,到目前为止,我想我知道基础知识,但是如果我更改顶点的顺序,则线条不会更改为它们应该。它只是重新排序标签。

如果有帮助,我将尝试解释该过程

edgelist = get.edgelist(net)
# get vertex labels
vlabels = get.vertex.attribute(net, "name")
# get vertex groups
vgroups = get.vertex.attribute(net, "group")
# get vertex fill color
vfill = get.vertex.attribute(net, "color")

# get vertex degree
degrees = degree(net)
# get edges value
values = get.edge.attribute(net, "value")

# data frame with vgroups, degree, vlabels and ind
x = data.frame(vgroups, vfill, degrees, vlabels, ind=1:vcount(net))
x = na.omit(x)
felec = x$ind
fcol = x$vfill

我正在尝试绘制电极的不同排列,我附上这个矩阵作为可重现的示例:

> edgelist
       [,1]    [,2]   
  [1,] "Fp1_1" "F8_2" 
  [2,] "Fp1_1" "FC5_2"
  [3,] "Fp1_1" "FC2_2"
  [4,] "Fp1_1" "FC6_2"
  [5,] "Fp1_1" "CP6_2"
  [6,] "Fp2_1" "Fp2_2"
  [7,] "Fp2_1" "F7_2" 
  [8,] "Fp2_1" "C3_2" 
  [9,] "Fp2_1" "Cz_2" 
 [10,] "Fp2_1" "CP2_2"
 [11,] "Fp2_1" "P7_2" 
 [12,] "Fp2_1" "Pz_2" 
 [13,] "Fp2_1" "P8_2" 
 [14,] "Fp2_1" "POz_2"
 [15,] "F7_1"  "F3_2" 
 [16,] "F7_1"  "FC5_2"
 [17,] "F7_1"  "C3_2" 
 [18,] "F7_1"  "Cz_2" 
 [19,] "F7_1"  "CP1_2"
 [20,] "F7_1"  "P4_2" 
 [21,] "F3_1"  "Fp1_2"
 [22,] "F3_1"  "Fp2_2"
 [23,] "F3_1"  "Fz_2" 
 [24,] "F3_1"  "F8_2" 
 [25,] "F3_1"  "FC2_2"
 [26,] "F3_1"  "CP5_2"
 [27,] "F3_1"  "P7_2" 
 [28,] "Fz_1"  "Fp1_2"
 [29,] "Fz_1"  "Fp2_2"
 [30,] "Fz_1"  "Fz_2" 
 [31,] "Fz_1"  "FC5_2"
 [32,] "Fz_1"  "FC6_2"
 [33,] "Fz_1"  "Cz_2" 
 [34,] "Fz_1"  "CP5_2"
 [35,] "Fz_1"  "CP6_2"
 [36,] "Fz_1"  "P4_2" 
 [37,] "Fz_1"  "P8_2" 
 [38,] "Fz_1"  "POz_2"
 [39,] "F4_1"  "Fp2_2"
 [40,] "F4_1"  "F4_2" 
 [41,] "F4_1"  "FC6_2"
 [42,] "F4_1"  "Cz_2" 
 [43,] "F4_1"  "CP5_2"
 [44,] "F4_1"  "CP1_2"
 [45,] "F4_1"  "P3_2" 
 [46,] "F4_1"  "Pz_2" 
 [47,] "F4_1"  "Oz_2" 
 [48,] "F8_1"  "F7_2" 
 [49,] "F8_1"  "F3_2" 
 [50,] "F8_1"  "Fz_2" 
 [51,] "F8_1"  "FC2_2"
 [52,] "F8_1"  "C3_2" 
 [53,] "F8_1"  "Cz_2" 
 [54,] "F8_1"  "CP5_2"
 [55,] "F8_1"  "CP2_2"
 [56,] "F8_1"  "P7_2" 
 [57,] "F8_1"  "P3_2" 
 [58,] "F8_1"  "P4_2" 
 [59,] "FC5_1" "F7_2" 
 [60,] "FC5_1" "F3_2" 
 [61,] "FC5_1" "Fz_2" 
 [62,] "FC5_1" "FC5_2"
 [63,] "FC5_1" "FC1_2"
 [64,] "FC5_1" "CP6_2"
 [65,] "FC5_1" "P7_2" 
 [66,] "FC5_1" "Pz_2" 
 [67,] "FC1_1" "FC2_2"
 [68,] "FC1_1" "Cz_2" 
 [69,] "FC1_1" "CP5_2"
 [70,] "FC1_1" "CP2_2"
 [71,] "FC1_1" "CP6_2"
 [72,] "FC1_1" "P3_2" 
 [73,] "FC2_1" "Fp1_2"
 [74,] "FC2_1" "F4_2" 
 [75,] "FC2_1" "C3_2" 
 [76,] "FC2_1" "CP1_2"
 [77,] "FC6_1" "Fp2_2"
 [78,] "FC6_1" "F8_2" 
 [79,] "FC6_1" "Cz_2" 
 [80,] "FC6_1" "CP2_2"
 [81,] "FC6_1" "CP6_2"
 [82,] "FC6_1" "P8_2" 
 [83,] "C3_1"  "Fp2_2"
 [84,] "C3_1"  "FC5_2"
 [85,] "C3_1"  "FC2_2"
 [86,] "C3_1"  "Cz_2" 
 [87,] "C3_1"  "P3_2" 
 [88,] "C3_1"  "P8_2" 
 [89,] "Cz_1"  "Fp2_2"
 [90,] "Cz_1"  "Fz_2" 
 [91,] "Cz_1"  "C3_2" 
 [92,] "Cz_1"  "CP5_2"
 [93,] "Cz_1"  "CP2_2"
 [94,] "Cz_1"  "P4_2" 
 [95,] "Cz_1"  "Oz_2" 
 [96,] "C4_1"  "Fz_2" 
 [97,] "C4_1"  "FC5_2"
 [98,] "C4_1"  "FC1_2"
 [99,] "C4_1"  "FC2_2"
[100,] "C4_1"  "C3_2" 
[101,] "C4_1"  "P3_2" 
[102,] "CP5_1" "F8_2" 
[103,] "CP5_1" "Cz_2" 
[104,] "CP5_1" "P7_2" 
[105,] "CP5_1" "Oz_2" 
[106,] "CP1_1" "F4_2" 
[107,] "CP1_1" "FC5_2"
[108,] "CP1_1" "C3_2" 
[109,] "CP1_1" "P7_2" 
[110,] "CP1_1" "Pz_2" 
[111,] "CP1_1" "POz_2"
[112,] "CP1_1" "Oz_2" 
[113,] "CP2_1" "F7_2" 
[114,] "CP2_1" "F4_2" 
[115,] "CP2_1" "CP2_2"
[116,] "CP6_1" "Fz_2" 
[117,] "CP6_1" "FC2_2"
[118,] "CP6_1" "C3_2" 
[119,] "CP6_1" "P7_2" 
[120,] "CP6_1" "P3_2" 
[121,] "CP6_1" "P4_2" 
[122,] "P7_1"  "F4_2" 
[123,] "P7_1"  "FC5_2"
[124,] "P7_1"  "CP5_2"
[125,] "P7_1"  "P4_2" 
[126,] "P7_1"  "P8_2" 
[127,] "P7_1"  "POz_2"
[128,] "P3_1"  "FC6_2"
[129,] "P3_1"  "Cz_2" 
[130,] "P3_1"  "CP6_2"
[131,] "P3_1"  "P3_2" 
[132,] "P3_1"  "P8_2" 
[133,] "P3_1"  "POz_2"
[134,] "P3_1"  "Oz_2" 
[135,] "Pz_1"  "Fp1_2"
[136,] "Pz_1"  "Fz_2" 
[137,] "Pz_1"  "FC5_2"
[138,] "Pz_1"  "Cz_2" 
[139,] "Pz_1"  "CP1_2"
[140,] "Pz_1"  "P7_2" 
[141,] "Pz_1"  "P3_2" 
[142,] "P4_1"  "F3_2" 
[143,] "P4_1"  "Fz_2" 
[144,] "P4_1"  "F4_2" 
[145,] "P4_1"  "FC1_2"
[146,] "P4_1"  "P7_2" 
[147,] "P8_1"  "Fp2_2"
[148,] "P8_1"  "Fz_2" 
[149,] "P8_1"  "FC2_2"
[150,] "POz_1" "F4_2" 
[151,] "POz_1" "FC1_2"
[152,] "POz_1" "C3_2" 
[153,] "POz_1" "POz_2"
[154,] "Oz_1"  "F4_2" 
[155,] "Oz_1"  "C3_2" 
[156,] "Oz_1"  "Cz_2" 
[157,] "Oz_1"  "P7_2" 
[158,] "Oz_1"  "P3_2" 
[159,] "Oz_1"  "P4_2" 
[160,] "Oz_1"  "P8_2" 

我了解脚本正在迭代以获取线条,而我的顺序就是您查看图像的顺序。从看起来它首先需要第一个边缘和情节,然后继续。

´´´> arcplot(edgelist)´´

现在,如果我使用 ordering 参数将 arcplot 重新排序为我想要的顺序,我会按预期得到重新排序。

> arcplot(edgelist, ordering = felec)

但是,现在我无法添加带颜色的向量,因为在内部 arcplot 仍然有自己的初始订单,而不是新订单(与原始订单网络相关联)。

> arcplot(edgelist, ordering = felec, col.nodes = fcol)

不幸的是,我期待这样的事情,当我删除重新排序并使用原始向量的顺序时会发生这种情况。当然现在,这个函数自动生成的顺序又是错误的。

> arcplot(edgelist, col.nodes = fcol)

从这个意义上说,预测edgelist 的输出顺序将非常有用,以便相应地准备向量。

当然,所有其他属性也会发生这种情况,包括 degree 和所有其他属性。

如果有人对如何预测或提取此顺序有任何想法,以便我可以使用其余属性,我将非常感谢任何帮助或想法,我不知道绘制弧线图的任何其他方式。

谢谢!

【问题讨论】:

    标签: r plot graph


    【解决方案1】:

    我最终使用了来自tidyverseggraph,比arcplot 更通用。学习花了我 30m 或更少,我的建议:不要卡在这个包里。

    我发布代码以防它对任何人有用:

    edgelist <- get.edgelist(net)
    # get vertex labels
    label <- get.vertex.attribute(net, "name")
    # get vertex groups
    group <- get.vertex.attribute(net, "group")
    # get vertex fill color
    fill <- get.vertex.attribute(net, "color")
    # get family
    family <- get.vertex.attribute(net, "family")
    # get vertex degree
    degrees <- degree(net)
    
    # data frame with groups, degree, labels and id
    nodes <- data.frame(group, degrees, family, label, fill, id=1:vcount(net))
    nodes$family <- factor(nodes$family, levels = unique(nodes$family))
    nodes$label <- factor(nodes$label, levels = unique(nodes$label))
    nodes <- as_tibble(nodes)
    #nodes <- na.omit(nodes)
    
    # prepare data for edges
    edges <- as_tibble(edgelist)
    
    net.tidy <- tbl_graph(nodes = nodes, edges = edges, directed = TRUE, node_key = "label")
    
    ggraph(net.tidy, layout = "linear") + 
      geom_edge_arc(alpha = 0.5) + 
      scale_edge_width(range = c(0.2, 2)) +
      scale_colour_manual(values= vrtxc) +
      geom_node_point(aes(size = degrees, color = family)) +
      geom_node_text(aes(label = label), angle = 90, hjust = 1, nudge_y = -0.2, size = 4) +   
      coord_cartesian(clip = "off") + 
      theme_graph()+
      theme(legend.position = "top") 
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      • 1970-01-01
      相关资源
      最近更新 更多