作图详解利用Python绘制自动聚类力导布局图

力导布局图是一种用来展示节点以及节点之间网络关系数据的图表,其布局算法模型建立在粒子物理理论的基础上,将节点模拟成为原子,通过原子间的引力和斥力得到节点的速度与加速度,计算其移动方位与距离,达到一个稳定平衡的状态,从而完成布局,便于描述节点间关系。

今天的教程教大家使用pyecharts来绘制自动聚类的动态力导布局图(如上图)。

准备数据:

绘图所用的excel数据表格如下:

数据横行表示数据源节点,即发射数据的节点,纵行表示数据目标节点,即接收数据的节点。横行和竖行的内容实际上是完全一样的发明人名称。表格中的数据表示两两发明人之间的合作申请量。

绘图思路:

导入绘图所需的两个扩展包python-igraph和pyecharts;

python-igraph和pyecharts其实都是用于绘制力导布局图的,但是为什么需要两个扩展包呢?

因为pyecharts的力导布局图的算法没有办法实现计算机自动根据远近关系对节点(即发明人)进行聚类,而python-igraph可以实现自动聚类。但是python-igraph的图表没有pyecharts那么美。

所以结合两者优点,需要导入两个扩展包。首先采用python-igraph对从excel中读取的数据进行计算分类,对分类后的数据标记分类信息,继而调用pyecharts绘图。

具体步骤如下:

STEP1导入绘图所需要的扩展包

作图需安装如下两个额外扩展包:

STEP2利用python-igraph实现自动聚类

导入绘图所需包:

frompyechartsimportGraph#导入echarts库中的力导布局图

importpandasaspd#导入pandas,用于操作excel文件

importnumpyasnp#导入numpy库,用于数值计算

importigraph#导入python-igraph库,用于对数据聚类

使用pandas读入excel数据:

df=pd.read_excel('力导布局图.xlsx')#打开excel文件

将数据处理为规定格式及采用igraph扩展包分类:

g=igraph.Graph(1)#实例化一个igraph对象

g.add_vertices(df.index)#添加igraph顶点(就是力导布局图中的节点),数据来自excel文件的行索引

weights=[]#备用空列表,用于存储igraph聚类所需要的权重信息

my_links=[]#备用空列表,用于存储pyecharts的链接信息

foriindf.index:#外层循环,轮询excel每个列

forjindf.columns:#内层循环,轮询excel每一行

ifdf[j][i]>0:#大于0的值有效

my_links.append({'source':i,'target':(j),'value':df[j][i]})#从excel中读取数据,填入上面的备用列表中

g.add_edge(i,j)#添加边信息到igraph中,igraph的边对应pyecharts的links

weights.append(df[j][i])#添加权重信息到igraph的备用列表中

else:

pass#小于等于0的数不操作

ifnotg.vs[0]['name']:#判断igraph是否自动生成了‘None’顶点

g.delete_vertices(0)#删除None顶点

result=g.community_multilevel(weights,True)#运行聚类算法,结果存放在result变量里,包含两种聚类结果

igraph.plot(result[1],mark_groups=True,margin=20,

vertex_label=[str(i)foriinrange(len(df.index))])#根据聚类结果,使用igraph的绘图函数绘图,显示聚类结果

colors_list=['yellowgreen','gold','lightskyblue','lightcoral',

'darkslateblue','#ADD8E6','#DDA0DD',

'#FAA460','#F0E68C','#8c564b','#e377c2',

'#7f7f7f','#bcbd22','#17becf']#备用颜色列表

category_dic={}#备用空字典,存放每个顶点(节点)对应的分类

forlist_datainresult[1]:#取第一种聚类结果,循环访问聚类结果中的每一个“小团伙”

fordatainlist_data:#循环访问每一个“小团伙”中的顶点,以便标记团伙内的顶点的分类

category_dic[df.index[data]]=df.index[list_data[0]]#把“小团伙”内每个顶点标记为同一个分类,分类名称以团伙第一个认的名字命名,记录到备用字典中

sym_x=[]#备用空列表,用于存放excel中每一行的数据和,即该顶点向其他顶点发射的数据总和

sym_y=[]#备用空列表,用于存放excel中每一列的数据和,即该顶点接收其他顶点发射的数据总和

sym=[]#备用空列表,用于存放excel中每一个顶点所在的行列的数据值的和,即一个顶点发射和接收的数据总和

foriindf.index:#对每个顶点循环

sym_x.append(sum(df.loc[i]))#计算每个顶点的发射数据总和,填入备用列表

foriindf.columns:#对每个顶点循环

sym_y.append(sum(df[i]))#计算顶点的接收数据总和,填入备用列表

fora,binzip(sym_x,sym_y):#对每个顶点的发射和接收数据同时进行循环

sym.append(ab)#计算总和,填入备用列表

my_nodes=[{'name':i,'symbolSize':int(np.sqrt(j)*np.sqrt(max(sym))/max(sym)*25),

'category':category_dic[i],'value':j,'draggable':1}fori,jinzip(df.index,sym)]#生成节点数据,填入每个节点的名字,图标大小,分类,数据总数。

category=[{'name':df.index[i[0]]}foriinresult[1]]#pyecharts需要知道一共有多少种分类,固定格式

在这一过程中,会弹出python-igraph计算后分类生成的图片,如下:

上图中每个不同颜色的分组为计算机自动聚类的结果。这张图的每个小圆圈表示一个节点,节点内的数字代表这个节点点在excel行或者列中的顺序(其实就是代表一个发明人),当然也可以直接用文字代替数字显示,但是会很杂乱。

STEP3利用pyecharts利用分类后的数据绘图:

graph=Graph('合作关系图',width=1000,height=900)#实例化pyecharts里的力导布局图

graph.add('',my_nodes,my_links,category,graph_gravity=1.0,

is_legend_show=True,label_color=colors_list,

is_label_show=True,label_pos='right',line_curve=0)#绘制力导布局图,节点间距离通过graph_gravity参数调节。

graph.render('graph.html')#保存图表,在当前目录下生成‘graph.html’文件,需要手动用浏览器打开

STEP4生成HTML格式的动态图表

Pyecharts生成的所有图表均为html网页格式,手动用双击文件就可以通过浏览器打开。

THE END
1.Python可视化神器(下)Plotly详细教程本次续接前一篇文章,更加详细的介绍plotly画图的各种核心构建,因为plotly实在是太过强大,一旦用顺手,保证你一定会爱不释手的。 鉴于篇幅较多,本次为系列文章第二篇。 目录 一 简介 二 绘图语法规则 2.1 离线绘图方式 2.2 graph对象 2.3 构造traces 2.4 定义Layout ...https://www.meipian.cn/56m3190x
1.Python如何打开绘图功能mob64ca12f6aae1的技术博客在数据分析和可视化领域,Python以其强大的库和工具在众多编程语言中脱颖而出。绘图功能是Python的一个重要特性,能够帮助开发者和数据科学家在探索数据时进行直观展示。本文将深入探讨如何在Python中打开绘图功能,并使用示例代码来创建简单的饼状图。 一、安装必要的库 ...https://blog.51cto.com/u_16213458/12657635
2.顶刊技巧!3D绘图!Python 3D绘图很简单 Python 中的 3-D 绘图很重要,可以更丰富、更全面地了解复杂信息,也让绘图更美观。 需要以下库: matplotlib:用于创建可视化。 numpy:用于数值运算和数据操作。 plotly:用于创建交互式绘图(用于 3-D 极坐标图)。 importmatplotlib.pyplotasplt ...https://blog.csdn.net/2301_77413856/article/details/144084611
3.Python气象绘图教程(十二)腾讯云开发者社区在前面的教程中,大部分的colorbar都是通过关键字参数传入的默认子图,这在大部分时候是非常方便的,但是某些时候会出现extend='both'命令无法生效的情况,这个时候就需要传入自定义colorbar。 代码语言:javascript 复制 cmap=mpl.cm.viridis norm=mpl.colors.Normalize(vmin=6.0,vmax=8.7)position=plt.axes([0.1,0.25,...https://cloud.tencent.com.cn/developer/article/1646457
4.Python气象绘图教程(十六)—Cartopy6腾讯云开发者社区Python气象绘图教程(十六)—Cartopy_6 本节提要:使用cartopy进行市县的色块填色、模仿geopandas绘制颜色图 一、利用cartopy进行市县的色块填色 其实geopandas在这方面比cartopy更加专业,由于是基于pandas的,所以在和表格类数据连接上的效果更好,不过cartopy也还能完成任务,虽然我想出的是个笨办法。https://cloud.tencent.com/developer/article/1646467
5.python众所周知,精美的图能让你的高质量期刊论文更上一层楼。为此,我们整理了一系列精美的作图教程,并配套了每一个教程所对应的环境,让你不但能轻松分析数据,还能一键出图! GOplot:画出差异表达基因富集结果 Notebook 链接:GOplot:把你的差异表达基因富集分析结果画出来! https://segmentfault.com/a/1190000044088213
6.python之matplotlib和pandas绘图教程python这篇文章主要介绍了python之 matplotlib和pandas绘图教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧不得不说使用python库matplotlib绘图确实比较丑,但使用起来还算是比较方便,做自己的小小研究可以使用。这里记录一些统计作图方法,包括pandas作图和plt作图。 前提是先导入第三方库吧 1 2 3 import ...https://www.jb51.net/article/207140.htm
7.PythonTurtle库创意绘图指南:绘制心形与花朵的实战教程!Python 的turtle库是一种简单易用的绘图工具,非常适合初学者学习编程。本文将详细介绍如何使用turtle库进行画布设置、画笔属性设置、画笔的移动与控制函数,并结合两个实战案例,包括“花”字绘制和心型图案的绘制。 一、Turtle 库基础介绍 turtle库模拟了一个小乌龟,作为一个画笔在画布上绘制各种图形。该库中的大部分操...https://www.iotword.com/28402.html
8.OpenCVPython教程下篇Python语言OpenCV-Python 级联分类器 | 六十二目标在本教程中,我们将学习Haar级联对象检测的工作原理。 我们将使用基于Haar Feature的Cascade分类器了解人脸检测和眼睛检测的基础知识。 我们将使用cv::CascadeClassifier类来检测视频流中的对象。特别是,我们将使用以下函数: cv::CascadeClassifier::load来加载.xml分类器文件。它可以...https://www.isolves.com/it/cxkf/yy/Python/2022-04-27/53791.html
9.Python的练手项目:用Python创建一张三维立体画(python基础教程)Python 的练手项目:用Python创建一张三维立体画(python基础教程) 本项目生成的三维立体画设计为用“墙眼”方式观看。看到它们的最好方法,就是让眼睛聚焦在图像后面的点(如墙上)。有点神奇,一旦在这些图案中感知到某样东西,眼睛就会自动将它作为关注的焦点,如果三维图像已“锁定”,你很难对它视而不见的(如果你仍...https://www.eolink.com/news/post/20169.html
10.跟着NC学作图使用python绘制折线图写在前面 今天分享一篇使用Python绘制折线图的教程,在我们前提的教程中,关于使用R语言绘制折线图的教程也很少,跟着PC学作图 | 小提琴图+Tufte箱形图+折线图的绘制...https://www.jianshu.com/p/f8f2ea35f94f