我对R来说相当新,而且我们无法找到答案。有人问a similar question,但没有报告过任何解决方案。如果我应该在不同的stackexchange上发布此Q,我道歉并将删除它是否无法迁移。
我使用从美国金融机构的FDIC中提取的数据及其总资产,我想创建一个基本网络图,其中每个节点按比例调整图中的每个其他节点的大小。每个节点也将标有金融机构的名称。
图表的边缘现在实际上并不重要,但我希望每个节点至少有一个边缘连接到网络。
截至目前,我已经成功创建了一个非常基本的网络,有8个银行,由我随机分配的边缘连接,as shown here(我显然无法嵌入图片,对不起):
我的.csv文件格式为:
id, bank, assets
1, JP Morgan Chase, 16928000
2, Bank of America, 19075000
... ... ...
对于我已经创建的图表,除了没有资产列之外,它与上面的图表相同。它也只有8家银行,我希望使用的文件将有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)。
感谢您的帮助,我真的很感激。
答案 0 :(得分:0)
正如@Osssan在评论中所链接的那样,有一个部分解决方案浮出水面。
那就是说,我认为我创造了更多的'黑客'解决方案,而不是我从上一个问题中收集到的正确解决方案。这就是我所做的。
在我的csv文件中,我有四列。在第三列中,我拥有给定银行的资产。 注意由于我不知道如何在R内部进行数据操作,我不得不做一些工作来调整资产值的大小,这样它就不会产生覆盖整个资源的节点。图表。使用我的解决方案,您将 NOT 自动获取相对大小的节点。你必须先这样做。
由于我想创建一个网络,其节点(银行)根据各自的资产持有量而变化,我所做的就是创建一个单独的向量
> df <- read.csv("~/blah/blah/blah.csv", colClasses = c("NULL","NULL", NA, "NULL"))
在csv文件中读取此命令的作用,查看带有colClasses
的标题,并告诉解释器清空指定的所有列(非NULL)。有了这个向量,我就把它插入到我的绘图函数中:
> plot(net, main = "Financial Intermediaries", edge.arrow.size=.4, vertex.size=as.matrix(df), vertex.label.color="black")
我使用as.matrix(df)
创建矩阵并将其设置为vertex.size=
。给定一个只有一个维度的向量,R能够快速生成适当的矩阵(我猜)。
我仍然需要进行一些重新标记并与边缘连接,但它在图形中起作用。我通过总资产持有量绘制了最大的26家商业银行(并将其调整为美国商业银行总资产的百分比),因此您将看到节点的规模从26-1增加。这是输出。
就像我说的,这个解决方案有效,但我不确定它是否会被认为是正确的还是犹太教的。我欢迎任何人编辑此解决方案,以便澄清我的代码实际发生的情况,或者发布适当/优化的解决方案(如果存在)。我会在标记解决之前几天给这篇文章留下坚实的内容,因为我仍然希望在这个令人困惑的问题上得到一个可靠的答案。
P.S。如果有人知道强制节点不重叠的方法,我会很感激地说明如何做到这一点。如果你看一下我的图片,你就会发现当最大的节点被它的密集大小的同伴所覆盖时,其他节点相形见绌的效果会减弱。