【发布时间】:2016-04-18 23:09:35
【问题描述】:
我对 R 还很陌生,无法找到答案。有人问a similar question,但没有报告任何解决方案。如果我应该将此 Q 发布到不同的 stackexchange 上,我很抱歉,如果无法迁移,我将删除它。
使用我从 FDIC 提取的有关美国金融机构及其总资产持有量的数据,我想创建一个基本网络图,其中每个节点的大小与图中的其他节点成比例。每个节点也将标有金融机构的名称。
图的边现在实际上并不重要,但我希望每个节点至少通过一条边连接到网络。
到目前为止,我已经成功创建了一个非常基本的网络,其中包含 8 个银行,由我随机分配的边连接,as shown here(我显然还不能嵌入图片,对此感到抱歉):
我的 .csv 文件将被格式化为:
id, bank, assets
1, JP Morgan Chase, 16928000
2, Bank of America, 19075000
... ... ...
对于我已经创建的图表,除了没有资产列之外,它与上面相同。也只有8个bank,我希望使用的文件有25个。
就像我已经说过的,至于边缘,我只是随机分配了一些。如果有人知道创建连接我创建的节点的随机边的更简单方法,请告诉我。否则,这就是我的文件现在的格式:
to, from
1, 2
1, 3
...
我创建了使用以下命令链接的图表:
> nodes <- read.csv("~/foo/foo/foo.csv")
> links <- read.csv("~/blah/taco/burrito/blah.csv")
> net <- graph_from_data_frame(d=links, vertices = nodes, directed = F)
> class(net)
> net
IGRAPH UN-- 8 10 --
+ attr: name (v/c), bank (v/c)
+ edges (vertex names):
[1] 1--2 1--3 1--4 1--5 2--3 2--4 2--7 4--5 5--8 7--8
> plot(net, main = "Financial Intermediaries", edge.arrow.size=.4, vertex.size=25, vertex.label.cex=1.5, vertex.label.color="black", vertex.label=V(net)$bank)
我希望我清楚我的问题并提供了必要的详细信息/代码。如果没有,请告诉我,我会在这里发布。就像我说的,我对 R 真的很陌生(我今天真的把它捡起来了,哈哈),到目前为止我使用的大部分代码都或多或少地取自 Katya Ognyanova 在她博客上的示例/演示文稿。
为了清楚起见,我目前使用的是 RStudio(最新稳定版)和 R v3.2.5。
我一直只使用igraph 包,但如果我想要的不能用它来完成,我非常愿意切换到不同的包。也就是说,我想继续使用 R(除非真的有更简单的东西,它不能被忽视。我想坚持并学习 R)。
感谢您的任何帮助,我真的很感激。
【问题讨论】:
-
欢迎来到 SO!,+1 以简洁地描述您的问题。您需要将资产向量传递给“vertex.size=as.matrix(assets)”,之前在这里回答过问题Adjusting node size of a graph
-
好的,问答似乎是我的方向。 igraph 会根据命名矩阵自动按比例缩放节点吗?即,我使用的所有值都在 10^5 - 10^7 之间,因此需要对输出大小进行某种调整。
-
好的,所以我一直遇到问题。为什么我只想在另一个向量上创建一个矩阵?我的资产值只是 csv 中的另一列,所以我不想像使用
vertex.label=V(net)$bank的名称那样迭代它吗?但是,当我尝试使用尺寸时,它不起作用并引发错误。 -
对不起,不工作,我的意思是它根本不会改变节点的大小。事实上,它们的大小都是一样的。当我尝试制作矩阵时,我开始出错。我不确定如何将我的资产列与我的节点结合起来。
标签: r nodes data-visualization graph-theory igraph