节点大小相对于关联值

Nodes Size Relative to Associated Value

我是 R 的新手,一直没能找到答案。其他人问 a similar question,但没有报告任何解决方案。如果我应该 post 在不同的 stackexchange 上编辑这个问题,我深表歉意,如果无法迁移,我将删除它。

我想使用我从美国联邦存款保险公司获取的有关美国金融机构及其总资产持有量的数据,创建一个基本网络图,其中每个节点的大小与图中的其他节点成比例。每个节点也将标有金融机构的名称。

图的边实际上暂时不重要,但我希望每个节点至少通过一条边连接到网络。

截至目前,我已经成功创建了一个非常基本的网络,其中包含 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)

我希望我清楚自己的问题并给出了必要的 details/code。如果没有,请告诉我,我会 post 放在这里。就像我说的,我真的是 R 的新手(我今天真的学会了,大声笑),到目前为止我使用的大部分代码或多或少来自 Katya Ognyanova 的 examples/presentations 在她的博客上。

为了清楚起见,我目前使用的是 RStudio(最新的稳定版)和 R v3.2.5。

我一直只使用 igraph 包,但如果无法用它完成我想要的,我非常愿意切换到另一个包。也就是说,我想留在 R 中(除非真的有更容易的东西,它不能被忽视。我想坚持并学习 R)。

感谢您的所有帮助,我真的很感激。

正如评论中链接到的@Osssan,有一个部分解决方案。

也就是说,我认为我创建的 'hack' 解决方案比我从上一个问题中收集到的适当解决方案更多。这是我做的。

在我的 csv 文件中,我有四列。在第三列中,我有给定银行的资产。 注意 因为我不知道如何在 R 中进行数据操作,所以我不得不做一些工作来调整资产值的大小,这样它就不会导致覆盖的节点整个图。使用我的解决方案,您将 NOT 自动获得相对大小的节点。你必须先这样做。

因为我想创建一个节点(银行)的网络,节点(银行)的大小根据各自的资产持有量而变化,我所做的就是创建一个单独的向量,就像这样

> df <- read.csv("~/blah/blah/blah.csv", colClasses = c("NULL","NULL", NA, "NULL"))

此命令的作用是读取 csv 文件,查看带有 colClasses 的标题并告诉解释器清除所有指定的列 (non-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 增加。这是输出。

就像我说的,这个解决方案有效,但我不确定它是否被认为是正确的或犹太洁食。我欢迎任何人编辑此解决方案,以便它阐明我的代码和/或 post proper/optimized 解决方案(如果存在)实际发生的情况。在将其标记为已解决之前,我将给这个 post 稳定的几天时间,因为我仍然希望在这个令人困惑的问题上得到可靠的答案。

P.S. 如果有人知道强制节点不重叠的方法,我将不胜感激解释如何做到这一点的评论。如果你看我的照片,你会发现当最大的节点被它大小相近的节点覆盖时,使其他节点相形见绌的效果会减弱。