当前位置: 首页 > 编程日记 > 正文

如何利用pyecharts绘制炫酷的关系网络图?

如何利用pyecharts绘制炫酷的关系网络图

这是本学期在大数据哲学与社会科学实验室做的第六次分享了。

第一次分享的是:

  • 如何利用“wordcloud+jieba”制作中文词云?

第二次分享的是:

  • 如何爬取知乎中问题的回答以及评论的数据?

第三次分享的是:

  • 如何利用百度AI平台或snownlp做中文文本的情感分析?

第四次分享的是:

  • 如何利用情感词典做中文文本的情感分析?

第五次分享的是:

  • 如何利用pyecharts绘制酷炫的桑基图?
  • 如何在Jupyter Lab中显示pyecharts的图形?

本次分享的是“如何利用pyecharts绘制炫酷的关系网络图?”

关系网络图简单来说就是由节点和边连接起来的图,绘制这种图需要用到pyecharts库。

安装:

pip install pyecharts

官方地址:

https://github.com/pyecharts/pyecharts/

开源教程:

https://pyecharts.org/#/zh-cn/intro

关系网络图的节点

class pyecharts.options.GraphNode

class GraphNode(# 数据项名称。name: Optional[str] = None,# 该类目节点标记的大小,可以设置成诸如 10 这样单一的数字,也可以用数组分开表示宽和高,# 例如 [20, 10] 表示标记宽为 20,高为 10。symbol_size: Union[Numeric, Sequence, None] = None,# 节点的初始 x 值。在不指定的时候需要指明layout属性选择布局方式。x: Optional[Numeric] = None,# 节点的初始 y 值。在不指定的时候需要指明layout属性选择布局方式。y: Optional[Numeric] = None,# 数据项所在类目的 index。category: Optional[int] = None,
)

关系网络图的边

class pyecharts.options.GraphLink

class GraphLink(# 边的源节点名称的字符串,也支持使用数字表示源节点的索引。source: Union[str, int, None] = None,# 边的目标节点名称的字符串,也支持使用数字表示源节点的索引。target: Union[str, int, None] = None,# 边的数值,可以在力引导布局中用于映射到边的长度。value: Optional[Numeric] = None,
)

节点分类的类目

class pyecharts.options.GraphCategory

class GraphCategory(# 类目名称,用于和 legend 对应以及格式化 tooltip 的内容。name: Optional[str] = None,
)    

关系网络图

class pyecharts.charts.Graph

class Graph(# 初始化配置项,参考 `global_options.InitOpts`init_opts: opts.InitOpts = opts.InitOpts()def add(# 系列名称,用于 tooltip 的显示,legend 的图例筛选。series_name: str,# 关系图节点数据项列表,参考 `opts.GraphNode`nodes: Sequence[Union[opts.GraphNode, dict]],# 关系图节点间关系数据项列表,参考 `opts.GraphLink`links: Sequence[Union[opts.GraphLink, dict]],# 关系图节点分类的类目列表,参考 `opts.GraphCategory`categories: Union[Sequence[Union[opts.GraphCategory, dict]], None] = None,# 节点之间的斥力因子。# 支持设置成数组表达斥力的范围,此时不同大小的值会线性映射到不同的斥力。值越大则斥力越大repulsion: Numeric = 50,# 图的布局。可选:# 'none' 不采用任何布局,使用节点中提供的 x, y 作为节点的位置。# 'circular' 采用环形布局。# 'force' 采用力引导布局。layout: str = "force",# 是否开启鼠标缩放和平移漫游。is_roam: bool = True,# 是否在鼠标移到节点上的时候突出显示节点以及节点的边和邻接节点。is_focusnode: bool = True,# 是否旋转标签,默认不旋转。is_rotate_label: bool = False,# 标签配置项,参考 `series_options.LabelOpts`label_opts: Union[opts.LabelOpts, dict] = opts.LabelOpts(),# 关系边的公用线条样式。linestyle_opts: Union[opts.LineStyleOpts, dict] = opts.LineStyleOpts(),)
)

【例子】普通的关系网络图

from pyecharts import options as opts
from pyecharts.charts import Graphnodes = [{'name': '结点1', 'symbolSize': 10},{'name': '结点2', 'symbolSize': 20},{'name': '结点3', 'symbolSize': 30},{'name': '结点4', 'symbolSize': 40},{'name': '结点5', 'symbolSize': 50},{'name': '结点6', 'symbolSize': 40},{'name': '结点7', 'symbolSize': 30},{'name': '结点8', 'symbolSize': 20}
]links = []
for i in nodes:for j in nodes:links.append({'source': i.get('name'), 'target': j.get('name')})G = Graph(init_opts=opts.InitOpts(width='900', height='500'))
G.add(series_name='',nodes=nodes,links=links,repulsion=8000
)
G.set_global_opts(title_opts=opts.TitleOpts(title='Graph-基本示例'))
G.render('graph_base.html')

【例子】带边信息的关系网络图

from pyecharts import options as opts
from pyecharts.charts import Graphnodes = [{'name': '结点1', 'symbolSize': 10},{'name': '结点2', 'symbolSize': 20},{'name': '结点3', 'symbolSize': 30},{'name': '结点4', 'symbolSize': 40},{'name': '结点5', 'symbolSize': 50},{'name': '结点6', 'symbolSize': 60},
]links = [{'source': '结点1', 'target': '结点2', 'value': 2},{'source': '结点2', 'target': '结点3', 'value': 3},{'source': '结点3', 'target': '结点4', 'value': 4},{'source': '结点4', 'target': '结点5', 'value': 5},{'source': '结点5', 'target': '结点6', 'value': 6},{'source': '结点6', 'target': '结点1', 'value': 7},
]G = Graph(init_opts=opts.InitOpts(width='900', height='500'))
G.add(series_name='',nodes=nodes,links=links,repulsion=4000,edge_label=opts.LabelOpts(is_show=True, position='middle', formatter='{b}的数据{c}')
)
G.set_global_opts(title_opts=opts.TitleOpts(title='Graph-带边信息的图'))
G.render('graph_with_edge_options.html')

【例子】NPM中的包依赖

NPM(Node Package Manager)的思路大概是这样的:

1.买个服务器作为代码仓库(registry),在里面放所有需要被共享的代码。

2.发邮件通知 jQuery、Bootstrap、Underscore 作者使用 npm publish 把代码提交到 registry 上,分别取名 jquery、bootstrap 和 underscore(注意大小写)。

3.社区里的其他人如果想使用这些代码,就把 jquery、bootstrap 和 underscore 写到 package.json 里,然后运行 npm install ,npm 就会帮他们下载代码。

4.下载完的代码出现在 node_modules 目录里,可以随意使用了。

这些可以被使用的代码被叫做「包」(package),这就是 NPM 名字的由来:Node Package(包) Manager(管理器)。

import json
from pyecharts import options as opts
from pyecharts.charts import Graphwith open(r'data/npmdepgraph.min10.json', 'r') as f:data = json.load(f)nodes = [{'x': node['x'],'y': node['y'],'name': node['label'],'symbolSize': node['size'],'itemStyle': {'color': node['color']}}for node in data['nodes']
]edges = [{'source': edge['sourceID'],'target': edge['targetID']}for edge in data['edges']
]G = Graph(init_opts=opts.InitOpts(width='900', height='900'))
G.add(series_name='',nodes=nodes,links=edges,layout='none',is_roam=True,is_focusnode=True,label_opts=opts.LabelOpts(is_show=True),linestyle_opts=opts.LineStyleOpts(width=0.5, curve=0.3, opacity=0.7)
)
G.set_global_opts(title_opts=opts.TitleOpts(title='NPM Dependencies'))
G.render('npm_dependencies.html')

【例子】悲惨世界(les miserables)人物关系网络图

import json
from pyecharts import options as opts
from pyecharts.charts import Graphwith open(r'data/les-miserables.json', 'r') as f:data = json.load(f)nodes = []
idDict = dict()
for node in data['nodes']:nodes.append({'x': node['x'],'y': node['y'],'name': node['name'],'symbolSize': node['symbolSize'],'category': node['category'],})idDict[node['id']] = node['name']links = [{'source': idDict[edge['source']],'target': idDict[edge['target']],}for edge in data['links']
]categories = [{'name': category['name']}for category in data['categories']
]G = Graph(init_opts=opts.InitOpts(width='900', height='900'))
G.add(series_name='',nodes=nodes,links=links,categories=categories,layout='circular',is_rotate_label=True,label_opts=opts.LabelOpts(position='right'),linestyle_opts=opts.LineStyleOpts(color='source', curve=0.3, opacity=0.7)
)
G.set_global_opts(title_opts=opts.TitleOpts(title='Les Miserables'),legend_opts=opts.LegendOpts(orient='vertical', pos_left='2%', pos_top='20%')
)
G.render('graph_les_miserables.html')

layout='none'时的图像:

layout='circular'时的图像:

【例子】微博转发关系网络图

import json
from pyecharts import options as opts
from pyecharts.charts import Graphwith open(r'data/weibo.json', 'r',encoding='utf_8_sig') as f:data = json.load(f)nodes = [{'name': node['name'],'symbolSize': node['symbolSize'],'category': node['category'],}for node in data['nodes']
]links = [{'source': edge['source'],'target': edge['target'],}for edge in data['links']
]categories = [{'name': category['name']}for category in data['categories']
]G = Graph(init_opts=opts.InitOpts(width='900', height='900'))
G.add(series_name='',nodes=nodes,links=links,categories=categories,repulsion=30,label_opts=opts.LabelOpts(is_show=False),linestyle_opts=opts.LineStyleOpts(curve=0.2)
)
G.set_global_opts(title_opts=opts.TitleOpts(title='微博转发关系图'),legend_opts=opts.LegendOpts(is_show=False)
)
G.render('graph_with_edge_options.html')

相关文章:

设Excle的cell中显示一个下拉列表选择框

描述:我想让excle的sheet页中的B列的每个cell输入内容的时候将A列所有行的内容作为下拉列表的选择内容 效果如下: 实现的步骤如下: 1.点击B列的头,选中整列 2.点击菜单栏的“数据”-》“数据有效性”,弹出如下的对话框…

Python培训中有哪些是必须学的运算符

不管是学Python技术还是其他的编程技术,运算符的学习都是少不了的,本期小编为大家推荐的教程就是关于Python培训中有哪些是必须学的运算符?来看看下面的详细介绍内容。 Python培训中有哪些是必须学的运算符? 布尔值:值只有两个,…

centos6 搭建heartbeat

Heartbeat是High-Availability Linux Project (Linux下的高可用性项目)的产物,是一套提供防止业务主机因不可避免的意外性或计划性宕机问题的高可用性软件。Heartbeat可以从Linux-HA 项目Web 站点免费获得,它提供了所有HA (高可用性&#xff…

标准C++中的string类的用法总结

相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用M…

NCEPU:线下组队学习周报(007)

线下组队学习 经过一段时间的准备,我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为: (1)周志华的《机器学习》(西瓜书) …

java培训面试技巧分享

很多人在学会java技术之后,就开始筹备自己的面试了,java技术在互联网行业的需求是很大的,所以内卷是很严重的,在面试环节一定要全力以赴才行,下面小编就教大家一些java培训面试技巧,希望能帮助到大家。 jav…

Python线程锁

多线程适用于IO密集型,多线程实现方式有两种,详见下方例子 例子: import threading class MyThread(threading.Thread): def __init__(self, args): #使用super写法,按照父类.方法的方式直接重写 super(MyThread, self).__init__(…

session_id

<?php session_start(); echo session_id(); // 输出 dqr58dnuqj2gufvg4o3tmjb9v4?>设置 session_id()<?php session_id("NowaMagic"); session_start(); echo session_id(); ?>程序恢复session&#xff0c;首先要知道session_id&#xff0c;大家通过…

【青少年编程】【二级】寻找宝石

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

零基础参加java培训主要学什么

互联网行业永远是一个需求非常大的行业&#xff0c;尤其是技术人员岗位&#xff0c;java技术岗一直很受大家的关注&#xff0c;不少学员都是零基础开始学&#xff0c;那么零基础参加java培训主要学什么呢?来看看下面的详细介绍。 零基础参加java培训主要学什么?其实无论学什么…

python pexpect

123456789101112131415161718192021222324252627282930313233343536373839404142434445Python 远程批量修改密码脚本#tar -zxvf pexpect-3.0.tar.gz#cd pexpect-3.0#python setup.py install#!/usr/bin/env python#coding:utf8import pexpect impo…

牧小熊:Adobe Illustrator 在科研作图中的应用!

聂雄伟&#xff0c;华中农业大学&#xff0c;Datawhale原创作者。 关于大数据的完整讲解&#xff01;电商数据分析项目总结&#xff01;数据项目总结&#xff1a;蛋壳公寓租金分析&#xff01;数据项目总结&#xff1a;王者荣耀总决赛预测&#xff01;你要的用户画像实践来了&…

win7,windowsXP安装mysql-5.1.49-win32,中文版、英文版,通吃

安装过程与其它Windows安装程序一样&#xff0c;首先出现的是安装向导欢迎界面[img]file:///C:/Users/房继诺/AppData/Roaming/Tencent/Users/1194361820/QQ/WinTemp/RichOle/0U9%7BVWW%60KM~S2X)VM2QF0N.jpg[/img] 直接点击“Next”&#xff0c;继续&#xff0c;选择安装类型这…

UI设计培训教程分享:UI设计师的色彩使用技巧

作为一名合格的UI设计师&#xff0c;色彩的使用是非常重要的&#xff0c;一个专业的UI设计师对于UI设计色彩的搭配是非常的出色的&#xff0c;下面小编就为大家分享UI设计培训教程&#xff1a;UI设计师的色彩使用技巧 UI设计培训教程分享&#xff1a;UI设计师的色彩使用技巧 一…

hive 使用技巧笔记

来源&#xff1a;http://michael-roshen.iteye.com/blog/2115268 例子&#xff1a; INSERT OVERWRITE TABLE prices_collected_${hiveconf:wid_version} select pc.collect_id as product_id , regexp_extract(pc.price,(\\d*\\.?\\d),1) as price , pc.region, as location…

GNU make manual 翻译( 一百四十九)

继续翻译 5.7.4 The --print-directory Option ------------------------------------If you use several levels of recursive make invocations, the -w or --print-directory option can make the output a lot easier to understand by showing each directory as make sta…

【青少年编程】马雷越:商品价格竞猜

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…

女生参加web前端培训压力大吗

女生参加web前端培训压力大吗?这个问题很多人都是想知道的&#xff0c;因为对于互联网行业来说&#xff0c;大部分都是男性&#xff0c;尤其是技术岗位&#xff0c;女生做前端压力大小和能力也有很大的关系&#xff0c;前端技术好工作效率高&#xff0c;那么压力相对较低。 女…

Android 入门开发

哈哈 我已经学会Android开发了 而且还发布了两款产品 转载于:https://www.cnblogs.com/Aixieer/archive/2012/10/04/2711443.html

整理了一下Asp.net源码常见问题(完善中...),欢迎大家补充修正(最后更新于06-01)!...

以下是一些51aspx网友经常反馈的问题&#xff0c;特总结放在下面&#xff0c;本部分内容会陆续更新。同时也提醒广大网友在仔细查看源码项目对应的运行环境及每个代码中所附的文本文件《51aspx源码必读.txt》。 Q&#xff1a;打开51aspx上网站源码项目需要什么样的软件环境&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 1. 一元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 相关内容&#xff1a; 西瓜书公式推导讲解来了&#xff01;0. 导学 后台…

Python培训教程分享:“高效实用” 的Python工具库

作为一名合格Python技术员&#xff0c;对于Python工具库的使用是少不了的&#xff0c;本期Python培训教程就为大家分享的是““高效实用” 的Python工具库”&#xff0c;希望能够帮助到大家。 Python培训教程分享&#xff1a;“高效实用” 的Python工具库&#xff1a; 1、Reque…

LNMP安装与启动脚本编写

1、安装mysql 1cd /usr/local/src/ 下载mysql&#xff1a; 1wget http://mirrors.sohu.com/mysql/MySQL-5.1/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 解压&#xff1a; 1tar zxvf/usr/local/src/mysql-5.1.72-linux-x86_64-glibc23.tar.gz 更改命名&#xff1a; 1mv mysql-5…

Flash Builder 找不到所需的Adobe Flash Player调试器版本的解决办法

Flash Builder在Debug时出现的问题&#xff1a;Flash Builder 找不到所需的Adobe Flash Player调试器版本 解决方法&#xff1a; 1. 进入Flash Builder的安装目录 C:\Program Files\Adobe\Adobe Flash Builder 4.6\player\win\11.1 2. 安装flashplayer_11_plugin_debug.exe&…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 2. 多元线性回归

Datawhale南瓜书是经典机器学习教材《机器学习》&#xff08;西瓜书&#xff09;的公式推导解析指南&#xff0c;旨在让在学习西瓜书的过程中&#xff0c;再也没有难推的公式&#xff0c;学好机器学习。 以往内容&#xff1a; 西瓜书公式推导讲解来了&#xff01;0. 导学1. 一…

UI设计培训分享:ui设计师如何培养设计思维?

作为一名UI设计师&#xff0c;工作上经常会遇到思维碰撞的问题&#xff0c;培养自己的设计思维是大部分UI设计师都需要的&#xff0c;那么ui设计师如何培养设计思维呢?来看看下面的详细介绍。 UI设计培训分享&#xff1a;ui设计师如何培养设计思维? 一、因舍而得 正如我们看到…

[转载红鱼儿]kbmmw 开发点滴:ErrorTable用法

TkbmMWClientQuery有一个ErrorTable属性&#xff0c;用于记录提交Query时返回的错误结果。当用户保存修改的业务数据&#xff0c;出错时&#xff0c;可以用ErrorTable定位出错的记录并提示错误信息。 下面是实现代码&#xff1a; procedure TForm2.Button4Click(Sender: TObjec…

ijkplayer iOS集成

2019独角兽企业重金招聘Python工程师标准>>> http://www.jianshu.com/p/1f06b27b3ac0 如果按楼主的方式配置后还编译报错&#xff0c;可能的原因是&#xff0c;需要将环境设置成C混编环境&#xff0c;可以直接将AppDelegate.m 改名成AppDelegate.mm 即可 转载于:htt…

【Whalepaper】CV论文研读 - OneNet:Towards End-to-End One-Stage Object Detection

Whalepaper是由周郴莲负责的一个每周分享论文的活动。 NLP 论文分享&#xff1a;每周日 晚上 九点CV 论文分享&#xff1a; 每周日 晚上 九点Res 论文分享&#xff1a;每周六 晚上 九点半 欢迎对paper感兴趣的人加入我们的分享啊&#xff01;&#xff01;&#xff01; 分享人…

软件测试培训分享:做软件测试工作如何清楚的描述一个bug

一名合格的软件测试工程师是需要清楚的交代自己的工作任务的&#xff0c;必须要清楚的告诉技术员出现的bug&#xff0c;那么做软件测试工作如何清楚的描述一个bug呢?来看看下面的详细介绍。 软件测试培训分享&#xff1a;做软件测试工作如何清楚的描述一个bug? 发现问题的版本…