Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用几何网格时正确显示_R_Ggplot2_Data Visualization_Social Networking - Fatal编程技术网

在R中使用几何网格时正确显示

在R中使用几何网格时正确显示,r,ggplot2,data-visualization,social-networking,R,Ggplot2,Data Visualization,Social Networking,给出如下数据帧: v1 v2 v3 v4 Tom A Jim B Gary A Shirly A Shirly B Jack B Tom A Jack B ... v2和v4表示v1和v3中的名称分别属于哪个组。汤姆属于A组,吉姆属于v4组。 我想用geom\u net绘制一个社交网络,如果两个名字在同一行中,则用线链接到两个名字,例如,Tom和Jim。而且边缘的大小应该与它们在V3中出现的时

给出如下数据帧:

v1     v2     v3     v4
Tom     A     Jim     B
Gary    A     Shirly  A
Shirly  B     Jack    B
Tom     A     Jack    B
...
v2和v4表示v1和v3中的名称分别属于哪个组。汤姆属于A组,吉姆属于v4组。 我想用
geom\u net
绘制一个社交网络,如果两个名字在同一行中,则用线链接到两个名字,例如,
Tom
Jim
。而且边缘的大小应该与它们在V3中出现的时间成正比,即
Jack
的边缘应该是
Jim
Shirly
的两倍大

我试过了

ggplot(df, aes(from_id = V1,to_id = V3)) +geom_net()
但给出了一个非常糟糕的结果:

并生成一个警告:

In f(..., self = self) :
There are 35 nodes without node information:
#And the below are all the values in V1 and V3
Tom, Shirly, ....
Did you use all=T in merge?
我想知道如何在没有x轴或y轴的情况下以适当和好看的方式显示结果,并且应该清楚地显示边之间的关系。边的颜色应该代表它们所属的组。这意味着同一组中的所有名称应具有相同的颜色


希望得到你的帮助!提前谢谢

我也一直在努力解决这个问题,直到我找到了geom_net包的正确data.frame结构。基本上,您需要的是一个data.frame,它有两个部分:在第1部分中,您通过提供FROM和TO列来描述边(绘制的线)。或者,可以在单独的列中提供附加信息,例如线宽

ans <- read.table(text ="
from to linewidth
Tom Jim 0.1
Gary Shirly 1
Shirly Jack 0.5
Tom Jack 2
", sep = " ", stringsAsFactors = FALSE, header=TRUE)

p <- ggplot(data = ans, aes(from_id = from, to_id = to))
p + geom_net(label = TRUE, vjust=-1)

ans这里是geomnet的维护者。如果可能,请将未来的问题发布到@hackR的想法是正确的,文档中有几个例子。其思想是:您有一个边数据框,它有一个from_id和一个to_id列(+附加列),还有一个顶点数据框,它有一个id列(+附加列)。然后合并它们:

network_data <- merge(edges, vertices, by.x = "from_id", by.y = "to_id", all = T)

network\u数据高。你解决过这个问题吗?如果是,怎么做?@hackR不,我最后使用了igraph。我还没有尝试过,但我认为你的解决方案正是我问题的正确答案,因为我在igraph中得到的结果形状与geom_net中的结果非常相似。但是没有出现在V1中的名字都丢失了。顺便说一句,你能上传你得到的图表吗?谢谢
lines <- read.table(text ="
from to linewidth
Tom Ivy 0.1
Gary Ivy 1
Shirly Ivy 0.5
Tom Helen 2
Helen Ivy 3
", sep = " ", stringsAsFactors = FALSE, header=TRUE, na.strings = "NA")

nodes <- read.table(text ="
name
Tom
Jim
Gary
Shirly
Jack
Helen
Susan
Joel
Ivy
", sep = " ", stringsAsFactors = FALSE, header=TRUE,na.strings = "NA")

df <- merge(lines, nodes, by.x = "from", by.y = "name", all = TRUE)

p <- ggplot(data = df, aes(from_id = from, to_id = to, linewidth = linewidth))
p + geom_net(label = TRUE, vjust=-1)
network_data <- merge(edges, vertices, by.x = "from_id", by.y = "to_id", all = T)