说起来这个ggnet,也是我当时瞎折腾出来的结果。我那会儿手头有个数据,是关于用户之间互动关系的,想可视化出来看看,哪个用户跟哪个用户联系紧密,或者说有没有什么小圈子。

最开始我是想用R里的那些老牌包,像igraph什么的。igraph是真强大,功能多得吓人。但是就喜欢好看的图,以前用ggplot2画图画习惯了,觉得那风格特对胃口。可igraph画出来的图,虽然能看,但总觉得差点儿意思,要调颜色调样式,得费老大劲儿。

于是乎,我就开始在网上乱搜,想看看有没有什么能把网络图和ggplot2结合起来的。这一搜,就搜到了ggnet这个包。当时心想,这名字起得gg开头,肯定跟ggplot2沾边儿。立马就动手去装了。

那会儿装包,我还记得挺清楚的,因为它不是直接就能搞定的,得用devtools从GitHub上装。我就先装了devtools,然后敲了行代码:devtools::install_github("briatte/ggnet")。等它吭哧吭哧装完,心里还挺期待的。

第一次尝试:看它能画出啥

装完之后,我赶紧把几个需要的包都加载进来:library(ggplot2)library(network),当然还有咱们的主角library(ggnet)。然后就是准备数据。

我的数据是那种邻接矩阵的格式,就是谁跟谁有关系,用1表示,没关系用0。我先随便弄了个小矩阵,比如5个节点之间的一些关系,转成了一个network对象。这是ggnet的基础,它吃的是network包里的网络对象。转数据这步,当时我是看了好多官方文档才弄明白的,各种参数,什么节点属性、边属性,一开始弄得我有点晕。

数据搞定,立马就跑了第一行代码:ggnet2(my_network_object)。我记得当时一回车,屏幕上唰地就出来一张图。虽然是默认的,颜色也单一,但那种ggplot2的底子一下子就出来了,跟平时画的柱状图、散点图感觉很像,一下子就有了亲切感。

摸索参数:让图活起来

光默认的肯定不行,得让它好看,有意义。我就开始翻文档,看ggnet2都能调哪些参数。

  • 布局(Layout):默认的布局有点乱,我就看到它有这个参数。我就去试"fruchtermanreingold",这个是大家用的比较多的力导向布局,能把关联紧密的节点拉到一起,关联不紧的分开。还有"kamadakawai""circle""random"这些,我都一个个试了。发现不同的数据,用不同的布局出来的效果差异还挺大的。每次换个布局,看图上的节点分布重新组织,就觉得挺有意思的。
  • 节点(Nodes)
    • 大小(Size):我最想让节点的大小反映它的重要程度,比如度(degree)。我就先把每个节点的度算出来,然后把这个度作为节点的一个属性加到network对象里。接着在ggnet2里用* = "degree",一下子节点就有了大小区别,一眼就能看出哪个节点更活跃了。
    • 颜色(Color):有的时候,我还想给节点按不同的类别上色。比如我的用户分成了几类,我就把分类信息也作为节点属性加进去,然后用* = "category"。图一出来,不同颜色的节点聚在一起,特别直观。
    • 标签(Label):节点光有大小颜色还不够,得知道它是谁。我就把用户的ID作为节点标签加上去,用* = TRUE。字体大小、颜色这些,也都可以调。
  • 边(Edges)
    • 颜色粗细:边代表关系,我也想给它加点戏。比如想看哪些边更重要,我就可以把边的权重加进去,然后用* = "weight"让边粗细有别。颜色也可以调,* = "grey"或者干脆让它不显示。
    • 箭头(Arrows):我的数据是互动的,有方向性。我就把* = 5之类的加上去,立马就能看到关系是从哪到哪了。

跟ggplot2结合:精修细节

ggnet2最厉害的地方,就是它画出来的图,本质上还是个ggplot对象。这意味着什么?意味着所有ggplot2的“魔法”我都可以用上!

比如,默认的图背景有点灰,我一眼就觉得不舒服。立马就加个+ theme_void(),把背景、网格线全去掉,让图变得干净清爽。标题、副标题,用labs()加进去。图例的文字太小,位置不用theme(* = "bottom")调整。颜色不够好看,用scale_color_manual()自己指定色板,想用啥色就用啥色。

那段时间,我几乎是把ggnet2的参数来来回回试了个遍,又结合ggplot2的各种主题和比例尺调整。每次调试出一张好看又清晰的图,心里就特别有成就感。从最初一张乱糟糟的图,到后来能够清晰地展示出用户群体之间的互动模式,那种感觉真挺棒的。

遇到过不少坑。比如数据格式不对,报错信息看不懂;或者节点太多,图画出来密密麻麻的,标签互相覆盖。这些时候,就是一边查文档,一边上网搜别人的代码,模仿着去改。慢慢地,就总结出了一些经验,比如节点太多可以考虑只显示度比较高的节点,或者干脆用交互式工具。但对于大部分情况,ggnet搭配ggplot2,已经足够我用了。

所以说,从一个对网络可视化有点懵逼的人,到后来能熟练地用ggnet画出自己想要的图,这个过程就像是探险一样。一步步摸索,一点点进步,虽然有时候会卡壳,但最终看到成果的那一刻,什么付出都值了。

免责声明:喜欢请购买正版授权并合法使用,此软件只适用于测试试用版本。来源于转载自各大媒体和网络。 此仅供爱好者测试及研究之用,版权归发行公司所有。任何组织或个人不得传播或用于任何商业用途,否则一切后果由该组织及个人承担!我方将不承担任何法律及连带责任。 对使用本测试版本后产生的任何不良影响,我方不承担任何法律及连带责任。 请自觉于下载后24小时内删除。如果喜欢本游戏,请购买正版授权并合法使用。 本站内容侵犯了原著者的合法权益,可联系我们进行处理。