【MATLAB】 Graph Object(3): 展示关系网

2024-01-10 12:50

本文主要是介绍【MATLAB】 Graph Object(3): 展示关系网,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 转自:https://zhuanlan.zhihu.com/p/20827594

myc这就把他呕心沥血的难产产物献给大家……

我们在上一篇讲Graph的文章中生成了一个专栏462名关注者的关系图。然而有句古话说的好

Code is cheap, show me the plot.

好在MATLAB新的Graph类自带了plot的函数

h  = plot(subsG);

 

这就是我们462个关注者及每个关注者的关注者的关系图。在人际关系图中,force graph更能体现出每个节点的重要性。我们来改变当前图的结构

h.layout('force')

 

放大看看是不是好一点?

并没有……主要是数据太多,都乌压压地在一起了。这里有5万多个节点,肯定看起来不方便。我们回到数据,想想最重要的是什么?

不就是我们专栏忠实的关注者吗?

于是我们取出这462位关注者,建立子图。在MATLAB中可以很方便的用subgraph功能从图中剥离出子图。

realFollower = subsG.findnode(ids);
followerGraph = subgraph(subsG,realFollower)
followerGraph = digraph with properties:Edges: [990×1 table]Nodes: [462×3 table]hsub = plot(followerGraph,'layout','force')

现在再来看看这462位关注者之间的关系,是不是比之前的清晰很多?

 

然而我们还可以做的更好。

我们的数据是多维的,比如每个关注者有自己的粉丝,如何在一个2维的图上显示出这个信息呢?

我们可以用每个节点的大小来代表他/她的粉丝数

hsub.MarkerSize = log(str2double(followerGraph.Nodes.Weight)+1.1)*2;

看起来不错,如果同时把节点的颜色变成他/她的粉丝数呢?

hsub.NodeCData=str2double(followerGraph.Nodes.Weight);

 

瞬间变的清晰明了了有没有?突出一个大V

然而myc很快的意识到,粉丝数的多少对于专栏来说并没有什么大用。倒是一个关注者在专栏内有多少个其他关注者粉丝是个很有意思的数据。我们用图的入度indegree来表示一个节点有多少个粉丝。

hsub.NodeCData=indegree(followerGraph);

 

我们可以看到,之前的大V节点在专栏内其实并不是有最多“朋友”的。当然本来粉丝就少的关注者在专栏内也不会有很多粉丝。

我们来看看到底是谁在专栏内有最多的关注者。我们进入datacursor模式。点击最黄的那个节点

hd = datacursormode;

在专栏内有93个粉丝哟,几乎占了462人的20%。很大程度上可以说有20%的人都是因为他/她而关注MATLAB专栏的。

但是默认的datatip给出的信息太生肉了,还带着那个不是给人看的id。我们来写一个自己的显示datatip的方式

hd.UpdateFcn = @(obj,event_obj) GraphCursorCallback(obj,event_obj,followerGraph);

在回调函数中,显示当前节点的名字,粉丝数,和专栏中的粉丝数

function output_txt = GraphCursorCallback(obj,event_obj,g)
% Display the position of the data cursor
% obj          Currently not used (empty)
% event_obj    Handle to event object
% output_txt   Data cursor text (character vector or cell array of character vectors).h = get(event_obj,'Target');
pos = get(event_obj,'Position');
ind = find(h.XData == pos(1) & h.YData == pos(2), 1);output_txt = {g.Nodes.uName{ind},['Follower ',g.Nodes.Weight{ind}],['Friend in subscriber ',num2str(indegree(g,ind))]};
end

再点击那个节点看看,原来是

@李崇

 ,他自己有1000+的粉丝,在专栏中有93个粉丝,说明他粉丝中至少10%的人是和他在MATLAB上有交集的(大概

MATLAB的GraphPlot类还提供了方便的高亮功能,比如我们想看我们的第一位关注者

@Yu Jiang

 老师在专栏中的粉丝图。

s= findedge(followerGraph,predecessors(followerGraph,1),1);
hsub.highlight(followerGrap
h.Edges.EndNodes(s,1),followerGraph.Edges.EndNodes(s,2),'EdgeColor','r');

红线连起来的就是

@Yu Jiang

 老师魔爪伸向的地方……

有了Graph类方便的可视化系统,我们就可以利用MATLAB做一些很有趣的事情

比如查看我们的专栏是如何一步步走到今天的。还记得我们在这篇文章里面建立的关注者追踪系统吗?

我们可以通过ThingSpeak Support Toolbox 来获取专栏关注的实时人数,并把他们的关系图画出来。

下面就展示了一个非常简单的动画效果。

 

这篇关于【MATLAB】 Graph Object(3): 展示关系网的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590871

相关文章

Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)

《Vue项目的甘特图组件之dhtmlx-gantt使用教程和实现效果展示(推荐)》文章介绍了如何使用dhtmlx-gantt组件来实现公司的甘特图需求,并提供了一个简单的Vue组件示例,文章还分享了一... 目录一、首先 npm 安装插件二、创建一个vue组件三、业务页面内 引用自定义组件:四、dhtmlx

Java中Object类的常用方法小结

《Java中Object类的常用方法小结》JavaObject类是所有类的父类,位于java.lang包中,本文为大家整理了一些Object类的常用方法,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. public boolean equals(Object obj)2. public int ha

深入探讨Java 中的 Object 类详解(一切类的根基)

《深入探讨Java中的Object类详解(一切类的根基)》本文详细介绍了Java中的Object类,作为所有类的根类,其重要性不言而喻,文章涵盖了Object类的主要方法,如toString()... 目录1. Object 类的基本概念1.1 Object 类的定义2. Object 类的主要方法3. O

matlab读取NC文件(含group)

matlab读取NC文件(含group): NC文件数据结构: 代码: % 打开 NetCDF 文件filename = 'your_file.nc'; % 替换为你的文件名% 使用 netcdf.open 函数打开文件ncid = netcdf.open(filename, 'NC_NOWRITE');% 查看文件中的组% 假设我们想读取名为 "group1" 的组groupName

利用matlab bar函数绘制较为复杂的柱状图,并在图中进行适当标注

示例代码和结果如下:小疑问:如何自动选择合适的坐标位置对柱状图的数值大小进行标注?😂 clear; close all;x = 1:3;aa=[28.6321521955954 26.2453660695847 21.69102348512086.93747104431360 6.25442246899816 3.342835958564245.51365061796319 4.87

C# double[] 和Matlab数组MWArray[]转换

C# double[] 转换成MWArray[], 直接赋值就行             MWNumericArray[] ma = new MWNumericArray[4];             double[] dT = new double[] { 0 };             double[] dT1 = new double[] { 0,2 };

【Python报错已解决】AttributeError: ‘list‘ object has no attribute ‘text‘

🎬 鸽芷咕:个人主页  🔥 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 文章目录 前言一、问题描述1.1 报错示例1.2 报错分析1.3 解决思路 二、解决方法2.1 方法一:检查属性名2.2 步骤二:访问列表元素的属性 三、其他解决方法四、总结 前言 在Python编程中,属性错误(At

起点中文网防止网页调试的代码展示

起点中文网对爬虫非常敏感。如图,想在页面启用调试后会显示“已在调试程序中暂停”。 选择停用断点并继续运行后会造成cpu占用率升高电脑卡顿。 经简单分析网站使用了js代码用于防止调试并在强制继续运行后造成电脑卡顿,代码如下: function A(A, B) {if (null != B && "undefined" != typeof Symbol && B[Symbol.hasInstan

libsvm在matlab中的使用方法

原文地址:libsvm在matlab中的使用方法 作者: lwenqu_8lbsk 前段时间,gyp326曾在论坛里问libsvm如何在matlab中使用,我还奇怪,认为libsvm是C的程序,应该不能。没想到今天又有人问道,难道matlab真的能运行libsvm。我到官方网站看了下,原来,真的提供了matlab的使用接口。 接口下载在: http://www.csie.ntu.edu.

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数

Matlab/Simulink中PMSM模型的反电动势系数和转矩系数_matlab pmsm-CSDN博客