在 "arcplot" 中使用 R 中的所有属性进行排序时出现问题
Problem ordering in "arcplot" with all the attributes in R
我正在尝试用 arcdiagram
包内的 arcplot
函数制作一个 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
和所有其他属性。
如果有人可能知道如何预测或提取此顺序以便我可以使用其余属性,我将非常感谢任何帮助或想法,我不知道绘制弧线图的任何其他方法。
谢谢!
我最终使用了 tidyverse
中的 ggraph
,比 arcplot
更通用。学习花了我30m或更少,我的建议:不要卡在这个包里。
我post代码以防对任何人有用:
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")
我正在尝试用 arcdiagram
包内的 arcplot
函数制作一个 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
和所有其他属性。
如果有人可能知道如何预测或提取此顺序以便我可以使用其余属性,我将非常感谢任何帮助或想法,我不知道绘制弧线图的任何其他方法。
谢谢!
我最终使用了 tidyverse
中的 ggraph
,比 arcplot
更通用。学习花了我30m或更少,我的建议:不要卡在这个包里。
我post代码以防对任何人有用:
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")