-
2021-05-12 16:04:50
效果图:
代码:
<!DOCTYPE html> <html> <head> <title>ECharts 关系图</title> <script src="js/echarts.min.js"></script> </head> <body> <div id="main" style="width: 600px;height:400px;border:1px solid #ccc;"></div> <script type="text/javascript"> var myChart = echarts.init(document.getElementById('main')); var obj = { relationList: { data: [ { name: '水站', symbolSize: 70, }, { name: '水站名称', symbolSize: 60, }, { name: '水站ID', symbolSize: 60, }, { name: '所需水规格', symbolSize: 60, }, { name: '所需数量', symbolSize: 60, } ], link: [ { source: '水站', target: '水站名称', name: '水站1', }, { source: '水站', target: '水站ID', name: '131', }, { source: '水站', target: '所需水规格', name: '1000', }, { source: '水站', target: '所需数量', name: '1234', } ] } } var relationData = obj.relationList; var data = relationData.data; var link = relationData.link; option = { series: [{ type: 'graph', // 类型:关系图 layout: 'force', //图的布局,类型为力导图 symbolSize: 5, // 调整节点的大小 roam: true, // 是否开启鼠标缩放和平移漫游。默认不开启。如果只想要开启缩放或者平移,可以设置成 'scale' 或者 'move'。设置成 true 为都开启 edgeSymbol: ['circle', 'arrow'], edgeSymbolSize: [1, 2], edgeLabel: { normal: { textStyle: { fontSize: 20 } } }, force: { repulsion: 1500, edgeLength: [10, 50] }, draggable: true, lineStyle: { normal: { width: 2, color: '#a4e0df' } }, edgeLabel: { normal: { color: '#a4e0df',//线上的字体颜色 show: true, formatter: function (x) { return x.data.name; } } }, label: { normal: { show: true, textStyle: {} } }, // 数据 data: data, links: link, color: ['#0d9e9e'] }] }; myChart.setOption(option); </script> </body> </html>
更多相关内容 -
Qt5类继承关系图
2014-01-29 12:21:51Qt5类继承关系图,对于理清Qt5框架还有有点帮助的。pdf文档只有一面,缩放比例放小一点。 -
【集合论】关系表示 ( 关系矩阵 | 关系矩阵示例 | 关系矩阵性质 | 关系矩阵运算 | 关系图 | 关系图示例 | ...
2020-10-03 23:20:11一、关系矩阵 、 二、关系矩阵示例 、 三、关系矩阵性质 、 四、关系矩阵运算 、 五、关系图 、 六、关系图示例 、 七、关系表示相关性质 、
一、关系矩阵
A = { a 1 , a 2 , ⋯ , a n } , R ⊆ A × A A = \{ a_1, a_2 , \cdots , a_n \} , R \subseteq A \times A A={a1,a2,⋯,an},R⊆A×A
R R R 使用 关系矩阵 表示 : M ( R ) = ( r i j ) n × n M(R) = (r_{ij})_{n\times n} M(R)=(rij)n×n
关系矩阵取值 : M ( R ) ( i , j ) = r i j = { 1 , a i R a j 0 , 无 关 系 M(R)(i, j) = r_{ij} =\begin{cases} 1, & a_i R a_j \\ 0, & 无关系 \end{cases} M(R)(i,j)=rij={1,0,aiRaj无关系
关系矩阵定义说明 :
A A A 是个 n n n 元集 ( 集合中有 n n n 个元素 ) , R R R 是 A A A 上的二元关系 , R R R 的关系矩阵是 n × n n \times n n×n 的方阵 , 第 i i i 行第 j j j 列位置的元素 r i j r_{ij} rij 取值只能是 0 0 0 或 1 1 1 ;
关系矩阵取值说明 :
如果 r i j = 1 r_{ij} = 1 rij=1 , 则说明 A A A 集合中 第 i i i 个元素与第 j j j 个元素具有关系 R R R , 记作 : a i R a j a_i R a_j aiRaj ;
如果 r i j = 0 r_{ij} = 0 rij=0 , 则说明 A A A 集合中 第 i i i 个元素与第 j j j 个元素没有关系 R R R ;
关系矩阵本质 : 关系矩阵中 , 每一行对应着 A A A 集合中的元素 , 每一列也对应着 A A A 集合中的元素 , 行列交叉的位置的值 ( 0 0 0 或 1 1 1 ) 表示 A A A 集合中第 i i i 个元素与第 j j j 个元素构成的有序对是否有关系 R R R ;
二、关系矩阵示例
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>}
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>}
使用关系矩阵表示上述 R 1 , R 2 R_1 , R_2 R1,R2 两个关系 :
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>} 其中 :
- < a , a > <a, a> <a,a> : a a a 是第 1 1 1 个元素 , a a a 是第 1 1 1 个元素 , 第 1 1 1 行第 1 1 1 列元素是 1 1 1
- < a , b > <a, b> <a,b> : a a a 是第 1 1 1 个元素 , b b b 是第 2 2 2 个元素 , 第 1 1 1 行第 2 2 2 列元素是 1 1 1
- < b , a > <b, a> <b,a> : b b b 是第 2 2 2 个元素 , a a a 是第 1 1 1 个元素 , 第 2 2 2 行第 1 1 1 列元素是 1 1 1
- < b , c > <b, c> <b,c> : b b b 是第 2 2 2 个元素 , c c c 是第 3 3 3 个元素 , 第 2 2 2 行第 3 3 3 列元素是 1 1 1
- 其余全是 0 0 0
M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>} 其中 :
- < a , b > <a, b> <a,b> : a a a 是第 1 1 1 个元素 , b b b 是第 2 2 2 个元素 , 第 1 1 1 行第 2 2 2 列元素是 1 1 1
- < a , c > <a, c> <a,c> : a a a 是第 1 1 1 个元素 , c c c 是第 3 3 3 个元素 , 第 1 1 1 行第 3 3 3 列元素是 1 1 1
- < b , c > <b, c> <b,c> : b b b 是第 2 2 2 个元素 , c c c 是第 3 3 3 个元素 , 第 2 2 2 行第 3 3 3 列元素是 1 1 1
- 其余全是 0 0 0
M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] M(R_2) = \begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤
三、关系矩阵性质
有序对集合表达式 与 关系矩阵 可以唯一相互确定
性质一 : 逆运算相关性质
M ( R − 1 ) = ( M ( R ) ) T M(R^{-1}) = (M(R))^T M(R−1)=(M(R))T
M ( R − 1 ) M(R^{-1}) M(R−1) 关系的逆 的 关系矩阵
与
( M ( R ) ) T (M(R))^T (M(R))T 关系矩阵 的 逆
这两个矩阵是相等的 ;
性质二 : 合成运算相关性质
M ( R 1 ∘ R 2 ) = M ( R 2 ) ∙ M ( R 1 ) M(R_1 \circ R_2) = M(R_2) \bullet M(R_1) M(R1∘R2)=M(R2)∙M(R1)
∙ \bullet ∙ 是矩阵的 逻辑乘法 , 计算 矩阵 r i j r_{ij} rij 的值 第 i i i 行 乘以 第 j j j 列 , 逐位 逻辑相乘 , 再将逻辑相乘结果再 逻辑相加 ;
上述 逻辑乘法使用 ∧ \land ∧ 运算 , 逻辑加法使用 ∨ \lor ∨ 运算 ;
四、关系矩阵运算
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a>, <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>}
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b> , <a,c> , <b,c> \} R2={<a,b>,<a,c>,<b,c>}
在上面的示例中 , 已经求出两个关系矩阵 ;
M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤ , M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] M(R_2) = \begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤
1. 求 M ( R − 1 ) , M ( R 2 − 1 ) M(R^{-1}) , M(R_2^{-1}) M(R−1),M(R2−1)
直接将矩阵转置 , 即可获取 关系的逆的关系矩阵 ;
M ( R 1 − 1 ) = ( M ( R 1 ) ) T = [ 1 1 0 1 0 0 0 1 0 ] M(R_1^{-1}) = (M(R_1))^T = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 0 \\\\ 0 & 1 & 0 \end{bmatrix} M(R1−1)=(M(R1))T=⎣⎢⎢⎢⎢⎡110101000⎦⎥⎥⎥⎥⎤
M ( R 2 − 1 ) = ( M ( R 2 ) ) T = [ 0 0 0 1 0 0 1 1 0 ] M(R_2^{-1}) = (M(R_2))^T = \begin{bmatrix} 0 & 0 & 0 \\\\ 1 & 0 & 0 \\\\ 1 & 1 & 0 \end{bmatrix} M(R2−1)=(M(R2))T=⎣⎢⎢⎢⎢⎡011001000⎦⎥⎥⎥⎥⎤
R 1 − 1 = { < a , a > , < a , b > , < b , a > , < c , b > } R_1^{-1} = \{ <a, a> , <a, b> , <b,a> , <c,b> \} R1−1={<a,a>,<a,b>,<b,a>,<c,b>}
R 2 − 1 = { < b , a > , < c , a > , < c , b > } R_2^{-1} = \{ <b, a> , <c,a> , <c,b> \} R2−1={<b,a>,<c,a>,<c,b>}
2. 求 M ( R 1 ∘ R 1 ) M( R_1 \circ R_1 ) M(R1∘R1)
M ( R 1 ∘ R 1 ) = M ( R 1 ) ∙ M ( R 1 ) M( R_1 \circ R_1 ) = M(R_1) \bullet M(R_1) M(R1∘R1)=M(R1)∙M(R1)
其中的 ∙ \bullet ∙ 是两个矩阵的逻辑乘法 , 加法使用 ∨ \lor ∨ , 乘法使用 ∧ \land ∧
M ( R 1 ) ∙ M ( R 1 ) = [ 1 1 0 1 0 1 0 0 0 ] ∙ [ 1 1 0 1 0 1 0 0 0 ] = [ 1 1 1 1 1 0 0 0 0 ] M(R_1) \bullet M(R_1) = \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 1 & 1 \\\\ 1 & 1 & 0 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)∙M(R1)=⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡110110100⎦⎥⎥⎥⎥⎤
矩阵的逻辑乘法 : 结果矩阵的第 i i i 行 , 第 j j j 列元素的值为 , 第 i i i 行的三个元素 分别与上第 j j j 列的三个元素 , 然后三个结果进行或运算 , 最终结果就是 矩阵的第 i i i 行 , 第 j j j 列元素的值 ;
R 1 ∘ R 1 = { < a , a > , < a , b > , < a , c > , < b , a > , < b , b > } R_1 \circ R_1 = \{ <a,a> , <a,b> , <a,c> , <b,a>, <b,b> \} R1∘R1={<a,a>,<a,b>,<a,c>,<b,a>,<b,b>}
3. 求 M ( R 1 ∘ R 2 ) M( R_1 \circ R_2 ) M(R1∘R2)
M ( R 1 ∘ R 2 ) = M ( R 2 ) ∙ M ( R 1 ) M( R_1 \circ R_2 ) = M(R_2) \bullet M(R_1) M(R1∘R2)=M(R2)∙M(R1)
其中的 ∙ \bullet ∙ 是两个矩阵的逻辑乘法 , 加法使用 ∨ \lor ∨ , 乘法使用 ∧ \land ∧
特别注意 , 合成的顺序是逆序合成 , 后者关系矩阵在前 , 前者关系矩阵在后
M ( R 1 ) ∙ M ( R 2 ) = [ 0 1 1 0 0 1 0 0 0 ] ∙ [ 1 1 0 1 0 1 0 0 0 ] = [ 1 0 1 0 0 0 0 0 0 ] M(R_1) \bullet M(R_2) =\begin{bmatrix} 0 & 1 & 1 \\\\ 0 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} \bullet \begin{bmatrix} 1 & 1 & 0 \\\\ 1 & 0 & 1 \\\\ 0 & 0 & 0 \end{bmatrix} = \begin{bmatrix} 1 & 0 & 1 \\\\ 0 & 0 & 0 \\\\ 0 & 0 & 0 \end{bmatrix} M(R1)∙M(R2)=⎣⎢⎢⎢⎢⎡000100110⎦⎥⎥⎥⎥⎤∙⎣⎢⎢⎢⎢⎡110100010⎦⎥⎥⎥⎥⎤=⎣⎢⎢⎢⎢⎡100000100⎦⎥⎥⎥⎥⎤
矩阵的逻辑乘法 : 结果矩阵的第 i i i 行 , 第 j j j 列元素的值为 , 第 i i i 行的三个元素 分别与上第 j j j 列的三个元素 , 然后三个结果进行或运算 , 最终结果就是 矩阵的第 i i i 行 , 第 j j j 列元素的值 ;
R 1 ∘ R 2 = { < a , a > , < a , c > } R_1 \circ R_2 = \{ <a,a>, <a,c> \} R1∘R2={<a,a>,<a,c>}
五、关系图
A = { a 1 , a 2 , ⋯ , a n } , R ⊆ A × A A = \{ a_1, a_2 , \cdots , a_n \} , R \subseteq A \times A A={a1,a2,⋯,an},R⊆A×A
R R R 的关系图 :
- 顶点 : ∘ \circ ∘ 表示 A A A 集合中的元素 ;
- 有向边 : → \rightarrow → 表示 R R R 中的元素 ;
- a i R a j a_i R a_j aiRaj 就是从顶点 a i a_i ai 到 顶点 a j a_j aj 的有向边 < a i , a j > <a_i , a_j> <ai,aj> ;
六、关系图示例
A = { a , b , c } A = \{ a, b, c \} A={a,b,c}
R 1 = { < a , a > , < a , b > , < b , a > , < b , c > } R_1 = \{ <a, a> , <a,b> , <b,a> , <b,c> \} R1={<a,a>,<a,b>,<b,a>,<b,c>} 关系图表示方式 :
R 2 = { < a , b > , < a , c > , < b , c > } R_2 = \{ <a,b>, <a,c>, <b,c> \} R2={<a,b>,<a,c>,<b,c>} 使用关系图表示 :
R 1 − 1 = { < a , a > , < a , b > , < b , a > , < c , b > } R_1^{-1} = \{ <a,a>, <a,b>, <b,a> , <c,b> \} R1−1={<a,a>,<a,b>,<b,a>,<c,b>}
R 2 − 1 = { < b , a > , < c , a > , < c , b > } R_2^{-1} = \{ <b,a> , <c,a> , <c,b> \} R2−1={<b,a>,<c,a>,<c,b>}
七、关系表示相关性质
A A A 集合中的元素 , 标定次序后 , 即生成了 A A A 上的关系 , R ⊆ A × A R \subseteq A \times A R⊆A×A , 有如下性质 :
- 关系图 G ( R ) G(R) G(R) 与 关系的 R R R 的集合表达式 ( 有序对集合 ) , 可以 唯一确定 ;
- 关系 R R R 的集合表达式 , 关系矩阵 M ( R ) M(R) M(R) , 关系图 G ( R ) G(R) G(R) , 都是一一对应的 ;
R ⊆ A × B R \subseteq A \times B R⊆A×B
- 集合 A A A 中有 n n n 个元素 , ∣ A ∣ = n |A| = n ∣A∣=n
- 集合 B B B 中有 m m m 个元素 , ∣ B ∣ = m |B| = m ∣B∣=m
- 关系矩阵 M ( R ) M(R) M(R) 是 n × m n \times m n×m 阶矩阵 ;
- 关系图 G ( R ) G(R) G(R) 有向边都是从 A A A 集合中的元素 指向 B B B 集合中的元素
-
干货!利用Python绘制精美网络关系图
2021-01-26 17:38:14点击上方蓝字关注我们 最近发现一个特别好用的python库,能够绘制精美的关系图,俗话说有好东西要学会分享,所以袁厨就肝了这篇文章,大家可以参考一下。一、概述 Networ...点击上方蓝字关注我们
最近发现一个特别好用的python库,能够绘制精美的关系图,俗话说有好东西要学会分享,所以袁厨就肝了这篇文章,大家可以参考一下。
一、概述
NetworkX是一个用python编写的软件包,便于用户对复杂网络进行创建、操作和学习。
利用networkx可以以标准化和非标准化的数据格式存储网络、生成多种随机网络和经典网络、分析网络结构、建立网络模型、设计新的网络算法、进行网络绘制等,Networkx主要用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能。我们用它可以将存储在邻接表或邻接矩阵里的网络图可视化。下面给大家看一下我自己画的一个例子吧。这样就大概可以了解怎么回事了。
小世界网络图 上面这张图片是我绘制的社交关系图,其中蓝色节点代表的是度最高的节点,就是社交关系最复杂的节点。
二、NetWorkx安装
安装方式主要有三种
1.命令行pip
2.pycharm安装
3.官方下载whl文件进行安装下面我给大家介绍最简单方便的第一种方式吧
1.win+r进入命令行界面
在这里插入图片描述 2.输入安装代码
pip install networkx -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
这里更换了豆瓣的镜像源。可以提高下载速度。安装其他包的时候,将networkx改成其他包名即可。
三、NetworkX基础知识
1.创建图
首先我们需要创建一个没有边和节点的图形,说白了就是先拿出一张白纸,我们准备在白纸上作画了。
import networkx as nx G = nx.Graph()#无多重边无向图 G = nx.DiGraph()#无多重边有向图 G = nx.MultiGraph()#有多重边无向图 G = nx.MultiDiGraph()#有多重边有向图
可以创建四种图形,无多重边无向图、无多重边有向图、有多重边无向图、有多重边有向图。常用的就是第一种图了
2.添加节点
这一步的作用就是在图中添加节点,我们可以一次添加一个节点,也可以添加一个节点列表
G.add_node(1)#添加节点1 G.add_nodes_from([2, 3])#添加节点2,3
两个命令是不一样的需要注意一下哦
3.添加边
当然边也可以单个添加和多个添加
G.add_edge('x', 'y') # 添加一条边起点为x,终点为y G.add_edges_from([(1, 2), (1, 3), (2, 3)]) # 添加多条边
下面我们来看一下当前效果
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() # 无多重边无向图 G.add_node(1) # 添加节点1 G.add_nodes_from([2, 3]) # 添加节点2,3 G.add_nodes_from([2, 3, 4, 5, 6]) # 添加节点2,3 G.add_edge('x', 'y') # 添加一条边起点为x,终点为y G.add_edges_from([(1, 2), (4, 5), (5, 6), (2, 4)]); G.add_edges_from([(1, 2), (1, 3), (2, 3)]) # 添加多条边 nx.draw(G, with_labels=True); plt.show()
4.给图中的节点和边添加属性
运行样式: - `node_size`: 指定节点的尺寸大小(默认是300) - `node_color`: 指定节点的颜色 (默认是红色,可以用字符串简单标识颜 色,例如'r'为红色,'b'为绿色等) - `node_shape`: 节点的形状(默认是圆形,用字符串'o'标识) - `alpha`: 透明度 (默认是1.0,不透明,0为完全透明) - `width`: 边的宽度 (默认为1.0) - `edge_color`: 边的颜色(默认为黑色) - `style`: 边的样式(默认为实现,可选:solid|dashed|dotted,dashdot) - `with_labels`: 节点是否带标签(默认为True) - `font_size`: 节点标签字体大小 (默认为12) - `font_color`: 节点标签字体颜色(默认为黑色) - `pos`: 布局 运用布局: circular_layout:节点在一个圆环上均匀分布 random_layout:节点随机分布 shell_layout:节点在同心圆上分布 spring_layout: 用Fruchterman-Reingold算法排列节点(样子类似多中心放射状) spectral_layout:根据图的拉普拉斯特征向量排列节点 我们需要在nx.draw这行代码里面添加属性。
下面我们来使用一下这些属性,看看会有什么效果。
添加节点属性
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() # 无多重边无向图 G.add_nodes_from([1,2,3,4,5,6]) # 添加节点2,3 G.add_edges_from([(1, 2), (4, 5), (5, 6), (2, 4),(1,3),(2,4)]); nx.draw(G, with_labels=True,node_size=200,node_color='#7FFF00')#在这里添加属性,添加颜色和大小 plt.show()
添加布局属性
pos =nx.shell_layout(G) nx.draw(G,with_labels=True,node_size=200,node_color='#7FFF00',pos=pos)
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() # 无多重边无向图 G.add_nodes_from([1,2,3,4,5,6,7,8,9,10]) # 添加节点2,3 G.add_edges_from([(1, 2), (4, 5), (5, 6), (2, 4),(1,3),(2,4),(3,6),(3,7),(4,8),(5,9),(7,10),(1,10)]); pos =nx.shell_layout(G) nx.draw(G,with_labels=True,node_size=200,node_color='#7FFF00',pos=pos) plt.show()
我们刚才用的属性是节点在同心圆上分布,效果如上图。还有其他分布方式大家可以试一下。
给节点添加不同的颜色
import networkx as nx import matplotlib.pyplot as plt G = nx.Graph() # 无多重边无向图 G.add_edges_from([(1,2),(2,3),(3,4),(4,1)]); color=['#7FFF00','#0000ff','#9999ff','#ff00ff'] pos =nx.shell_layout(G) nx.draw(G, with_labels=True,node_size=200,node_color=color,pos=pos) plt.show()
不同节点不同颜色 我们还可以给每个节点设置不同的颜色。当然大小也可以,这里自由发挥就好了。
5.样例实现
我们用了两种不同的节点分布方式,效果如下。
import networkx as nx import matplotlib.pyplot as plt net_grid = nx.Graph() # nodes list_net_nodes = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] # edges list_net_edges = [(1, 3), (3, 5), (5, 4), (4, 2), (2, 6), (5, 7), (5, 8), (8, 6), (7, 9), (8, 9), (6, 10), (9, 11), (10, 12), (10, 13), (11, 14), (12, 14), (12, 15), (14, 16), (15, 16), (15, 17), (16, 18), (17, 19),(12, 2),(12, 1), (18, 20), (19, 7),(19, 2),(19, 1),(19, 5)] net_grid.add_nodes_from(list_net_nodes) net_grid.add_edges_from(list_net_edges) pos = nx.random_layout(net_grid)#随机分布 nx.draw_networkx_nodes(net_grid, pos=pos, node_color='#ff0000', node_size=200, alpha=0.6)#点的样式 nx.draw_networkx_edges(net_grid, pos=pos, width=0.5, alpha=0.4)#边的样式 plt.show()
学到这里基本的图就会画了,下面学习一下通过数据集进行绘制绘制网络图
6.导入数据进行绘图
利用football数据集绘制社交关系图,
import networkx as nx import matplotlib.pyplot as plt net_grid = nx.Graph() #构建函数,提取出数据集里的边和点 def read_gml(data): H = nx.read_gml(data) nodedata= H.nodes; eagedata=H.edges; return nodedata,eagedata #引用函数得到边和点 (nodeums,edgesnum)=read_gml('football.gml') net_grid.add_nodes_from(nodeums) net_grid.add_edges_from(edgesnum) pos = nx.random_layout(net_grid)#随机分布图 nx.draw_networkx_nodes(net_grid, pos=pos, node_color='#7FFF00', node_size=150, alpha=0.7)#点的样式 nx.draw_networkx_edges(net_grid, pos=pos, width=0.3, alpha=0.2)#边的样式 plt.show()
上面三张图片是利用不同的排列方式进行排列的。Networkx还有很多强大的功能,大家可以继续深挖,这里为大家提供一个入门参考,感谢大家的支持。如果大家感觉Networkx不能满足大家的需求,绘制网络图的python库还有DGL,PyG。
如果大家需要可以私信我
-
实体关系图 (ERD) 指南
2021-12-23 16:08:00在本指南中了解有关实体关系图 (ERD)、它们的用途、如何理解它们、如何创建它们等的所有信息。 实体关系图 (ERD) 是一种图表,可让您查看不同实体(例如人员、客户或其他对象)在应用程序或数据库中如何相互关联。 ...在本指南中了解有关实体关系图 (ERD)、它们的用途、如何理解它们、如何创建它们等的所有信息。
实体关系图 (ERD) 是一种图表,可让您查看不同实体(例如人员、客户或其他对象)在应用程序或数据库中如何相互关联。
它们是在设计新系统时创建的,以便开发团队可以了解如何构建数据库。它们也可以在现有系统上创建,以帮助团队了解系统的工作方式并查找和解决任何问题。
实体关系图使用一组特定的符号(例如形状和箭头)来描述系统和数据库。
这是 ERD 的示例:
ERD 的组成部分
实体关系图由许多不同的组件组成:
- 实体 (Entity)
- 关系 (Relationship)
- 属性 (Attribute)
实体
实体是可以存储有关它的数据的事物。它可以是物理对象(例如汽车、人)、概念(例如地址)或事件(例如学生注册课程)。它们代表名词。
它们通常表示为 ERD 上的矩形,矩形内带有实体名称。
实体也可以是强实体或弱实体。有什么不同?
强实体具有标识符(主键)并且不依赖于任何其他实体以使其存在。例如,学生可能是一个强大的实体,因为它可以有一个主键并且不依赖于任何其他实体来存在。
弱实体是依赖于强实体存在的实体。这意味着它有另一个实体的外键。例如,学生的注册可能是一个弱实体,因为没有学生就不可能存在注册。
关系
ERD 中的关系定义了两个实体如何相互关联。当谈到数据库或一组实体时,它们可以从动词派生。
ERD 中的关系表示为两个实体之间的线,并且通常在线上有一个标签来进一步描述关系(例如“注册”、“注册”、“完成”)。
ERD 上表示了几种类型的关系:
- 一对一:实体的一条记录与实体的另一条记录直接相关
- 一对多:一个实体的一个记录与另一个实体的一个或多个记录相关。
- 多对多:一个实体的多条记录可以与另一实体的多条记录相关。
属性
属性是实体的属性或可用于描述实体的东西。它们通常表示为椭圆形,或实体内的条目。
ERD 上表示了几种不同类型的属性:
- 简单:不能拆分为其他属性的属性,例如名字。
- 复合:可以拆分为其他属性的属性,例如将姓名拆分为名字、中间名和姓氏。
- 派生:从另一个属性计算或确定的属性,例如从创建日期计算的记录年龄。
属性也可以是单值或多值:
- 单值:只捕获一次的属性
- 多值:可以为一个实体多次捕获的属性,例如多个电话号码。
什么是基数 (Cardinality)?
基数表示存在于两个实体之间的关系中的实体的实例数。这通常表示为数字,但也可以是符号,具体取决于所使用的图表样式。常见的基数值是零、一或多。
我们将在本指南后面看到一些基数示例。
自然语言 (Natural Language)
当我们创建 ERD 时,我们通常会知道我们想要捕捉什么。这通常可以用文字或“自然语言”来表达。
一些例子是:
- “记录学生,他们注册的课程,以及教授课程的老师”
- “捕获客户订单、客户详细信息以及订单发送地点”
- “捕获患者数据及其进行的操作”
这些句子包括几种不同类型的单词,可用作 ERD 的起点。它们以几种不同的方式表示:
- 名词:“东西”,如学生或顾客。表示为一个实体。
- 动词:动作,例如注册或发送。表示为两个实体之间的关系。
- 形容词:描述词,如住宅或高级。表示为实体的属性。
这可以帮助您将需要绘制的图表的描述转换为实际图表。
符号和符号
创建 ERD 时,可以很容易地在它们之间创建框和线。但是,就像软件开发中的许多事情一样,有几种不同的方法和标准可用。对于 ERD,有多种符号标准,用于定义所使用的符号。
Chen
以下是与 Chen 符号样式一起使用的符号示例。
这是一个使用 Chen 符号的 ERD 示例:
乌鸦脚 (Crow's Foot)
这是用于乌鸦脚符号样式的符号示例。这是您在 Database Star 上看到最多的样式,因为它是我最熟悉的样式。它被称为“乌鸦的脚”,因为它象征着许多关系,看起来就像三爪乌鸦的脚。
这是一个使用 Crow's Foot 符号的 ERD 示例:
巴赫曼 (Bachman)
下面是与巴赫曼符号风格一起使用的符号示例。
下面是一个使用 Bachman 符号的 ERD 示例:
IDEF1X
下面是用于 IDEF1X 符号样式的符号示例。
这是使用 IDEF1X 表示法的示例 ERD:
巴克 (Baker)
下面是与 Barker 符号样式一起使用的符号示例。
下面是一个使用 Bachman 符号的 ERD 示例:
概念的 (Conceptual)、逻辑的 (Logical)、物理的 (Physical)
可以在三个不同的层次上绘制实体关系图:概念、逻辑或物理。
这些级别中的每一个都有不同的详细级别,用于不同的目的。
让我们看一些例子。
概念数据模型 (Conceptual Model)
概念数据模型显示系统中存在的业务对象以及它们如何相互关联。
它定义了存在的实体,这些实体不一定是表。对于这种类型的数据模型,对表格的思考过于详细。
此处显示了概念数据模型的示例。它显示了学生、课程以及它们之间的关系。
逻辑数据模型 (Logical Model)
逻辑模型是概念数据模型的更详细版本。属性被添加到每个实体,并且可以添加更多实体来表示区域以在系统中捕获数据。
下面是作为逻辑数据模型创建的学生和课程数据模型的示例。
物理数据模型 (Physical Model)
物理数据模型是这个过程中最详细的数据模型。它定义了一组表和列以及它们如何相互关联。它包括主键和外键,以及每列的数据类型。
这些图表可以在数据建模工具中手动创建。它们通常也由 IDE 从现有数据库生成。
这是学生和课程物理数据模型的示例。
下表概述了概念、逻辑和物理模型之间的差异:
特征 概念性的 逻辑的 身体的 实体 是的 是的 是的 关系 是的 是的 是的 属性 是的 是的 属性类型 是的 钥匙 是的 如何创建实体关系图
那么如何创建数据模型或实体关系图呢?
我在我的关系数据库设计课程中详细介绍了这一点,我也在我的数据库设计指南中进行了解释。
创建 ERD 的过程是:
- 写一两句关于您存储数据的内容
- 列出你存储的数据——名词/对象
- 列出要为每个对象存储的信息
- 描述每个对象之间的关系
- 画图
此处列出的步骤很简短,但该过程可能需要一些时间,具体取决于您对系统的熟悉程度以及您在创建实体关系图方面的经验。
创建实体关系图的技巧
以下是创建实体关系图的一些技巧:
- 根据图表的目的确定正确的详细程度。开发团队通常会发现逻辑模型最有用,但其他人可能会发现概念模型更有价值。
- 查看实体和属性以查看它们是否包含您要存储在系统中的所有内容。
- 命名所有实体和属性。
- 如果您有一个大图表,请考虑使用颜色来突出显示不同的部分,或将其分解为较小的图表。
- 与您的命名和使用的符号保持一致。
结论
实体关系图是一个很好的工具,可以帮助您定义、理解和沟通系统的需求。它可以在高层(概念数据模型)、详细级别(物理数据模型)或中间级别(逻辑数据模型)进行建模。
有一系列的建模符号或符号类型,它们定义了如何捕获实体、属性和关系。
如果您想开始为您的系统创建ERD,可以考虑在纸上画一个,或者使用Visual Paradigm Online 工具。
Visual Paradigm 的在线 ERD 软件使数据库设计变得快速而直接。ERD 图表工具具有创建专业、行业标准 ER 模型所需的所有 ERD 符号和连接器。无论您想创建概念、逻辑或物理数据模型, 下面汇总了一些 ERD 示例以帮助您入门。
单击 ER 图进行查看,或单击编辑按钮开始编辑。
-
什么是实体关系图(ERD)?
2020-07-13 14:53:19什么是实体关系图(ERD)? 转载自:https://www.visual-paradigm.com/cn/guide/data-modeling/what-is-entity-relationship-diagram/ 数据库是软件系统中不可或缺的一个组成部分,若能在数据库工程中好好利用 ER 图... -
uml之实体关系图
2019-05-19 00:44:54什么是实体关系图(ERD)? 数据库是软件系统中不可或缺的一个组成部分,若能在数据库工程中好好利用 ER 图,便能让您生成高质量的数据库设计,用于数据库创建,管理和维护,也为人员间的交流提供了具意义的基础。 ... -
Python数据可视化 Pyecharts 制作 Graph 关系图
2021-03-19 22:22:10Python3 的 Pyecharts 制作 **Graph(关系图)** 时需要使用的设置参数和常用模板案例,可根据实际情况对案例中的内容进行调整即可。 -
ER图(实体关系图)怎么画?
2020-11-27 19:56:32E-R图又称实体关系图,是一种提供了实体,属性和联系的方法,用来描述现实世界的概念模型。通俗点讲就是,当我们理解了实际问题的需求之后,需要用一种方法来表示这种需求,概念模型就是用来描述这种需求。 比如... -
使用Navicat生成ER关系图并导出
2022-02-27 09:15:461.打开已经设计好的表视图界面 2.点击右下角的按钮切换到ER视图 3.在数据库名字上,右击选择逆向数据库到模型 4.选择导出,导出格式有三种,pdf、svg和png -
数据库:实体关系图(ER图)
2020-11-08 10:07:491,组成元素 元素 描述 表示形似 实体 客观存在并可以相互区别的事物 用矩形框,矩形框内写明实体名 属性 实体所具有的一个属性...一对一关系是指对于实体集A与实体集B,A中的每一个实体至多与B中 -
数据库关系图的作用是什么?
2021-01-14 14:39:30问题详情数据库关系图的作用是什么?一、数据库关系图的作用是什么?二、ER图的作用是什么?三、两者之间的差别和联系???作者: zhanghaojiefengf发布时间: 2011-10-25Mark,学习。作者: zhanghaojiefeng发布时间... -
关系图怎么画?一款实用高效的关系图软件推荐
2020-09-14 18:27:13《东方列车谋s案》人物关系图 画起来也不难,简单3步就能完成。 接下来,我就以上面这张人物关系图为例进行绘制演示: 1)打开亿图图示,选择“新建>基础绘图>新建空白画布” 新建画布 2)从左侧符号库... -
MySQL Workbench构建ER图(实体关系图)
2019-07-06 00:16:50数据实体模型构建后,可以在Diagram中构建实体间的关系图(ER图): 以上ER图中有两种一对多的关系,它们分别表示identitying relationships和non-identitying relationships。其中identitying relationships是指子... -
SQL Server 2012 关系图
2019-04-21 23:26:19文章目录准备知识创建数据库关系图添加数据表新建数据表切换数据表视图定义主键约束定义外键约束 准备知识 数据库的关系图以图表的形式,直观地显示出数据库的整体结构。使用数据库关系图可以方便地创建和... -
`echarts`实现关系图拖拽
2018-11-08 14:53:30目标:echarts实现关系图拖拽 效果:当所有的节点都处在高亮的状态时,可以拖拽任何节点。当点击其中一个节点与之有直接联系的节点高亮,其他的置灰。并且高亮的节点均可拖拽。点击空白处时恢复原来的状态,才能继续... -
Vue+ECharts+关系图
2020-12-02 22:49:36Vue+ECharts画关系图 项目需求:使用echarts画出一个关系图并在前端进行展示 使用框架:vue2.x 今天忙了一天,终于是做出了一个简单的示意图。先上图看看效果。 只是简单的做了一个视图,数据是写死的,后面会记录... -
Gephi可视化人物关系图
2020-04-10 19:49:37大家好,昨天跟大家介绍了一下在文本中抽取出人物关系,今天将利用gephi来绘制人物关系图。 背景知识介绍 图相关的概念和术语 图的度量 实现网络图绘制 一、背景知识 图是一种数据结构 图结构:是研究... -
E-R图 实体,属性,关系图
2020-07-03 18:18:07E-R图 实体,属性,关系图 在ER图中有如下四个成分: 矩形框:表示实体,在框中记入实体名。 菱形框:表示联系,在框中记入联系名。 椭圆形框:表示实体或联系的属性,将属性名记入框中。对于主属性名,则在其... -
ECharts关系图(详细示例——满满的注释)
2018-06-01 01:49:37图表效果如下:具体代码如下:<!DOCTYPE html> <html>...关系图案例</title> <!-- 引入 ECharts 文件 --> <script src="js/ -
几个常用的UML关系图
2018-04-10 16:52:48本文转自UML常用图的几种关系的总结 - 拥抱变化 - 博客频道 - CSDN.NET http://blog.csdn.net/suxinpingtao51/article/details/8011335在UML的类图中,常见的有以下几种关系: 泛化(Generalization), 实现... -
IDEA 查看类之间的关系图详解
2021-05-04 22:11:09在idea 选中要查看的类,使用Control+H 命令就可以查看类的依赖架构图。这里我们已ArrayList为例子。 可以看到,使用之后出现了以上图片,ArrayList类的架构图一目了然,这样也方便我们去查看源码分析。 Diagrams ... -
三角函数关系图
2020-03-15 21:27:02倒三角关系 sin2(x)+cos2(x)=1sin^{2}(x) + cos^{2}(x) = 1 sin2(x)+cos2(x)=1 tan2(x)+1=sec2(x)tan^{2}(x) + 1 = sec^{2}(x)tan2(x)+1=sec2(x) 1+cot2(x)=csc2(x)1 + cot^{2}(x) = csc^{2}(x) 1+cot2(x)=csc2(x) 2... -
社交网络分析之关系图(原理+Python代码)
2021-01-25 20:07:14社交网络分析是图关系挖掘的一个分支,通常以关系图的形式来展示人与人之间的关系网络。在人物关系图中,一个节点代表一个人,节点之间的连线表示这些人之间存在关系。网络的节点越多,说明该社交网络越庞大;连线越... -
微信小程序 ———— 使用ECharts实现树状关系图
2020-05-19 11:24:52在开发中,有时候会遇到展示一些人物关系,上下级关系等相关需求,使用树状图可以清晰的表达出来 首先看下目录结构 - component - echarts - ec-canvas.js - ec-canvas.json - ec-canvas.wxml - ec-canvas.... -
查看数据表ER图(关系图)
2019-06-16 10:05:13转载:使用Navicat查看数据表的ER关系图 plsql: -
便捷绘制人物关系图的软件分享
2020-09-09 20:34:40今天分享两款压箱底的工具,支持高效绘制人物关系图。 1、亿图图示 这张就是阿加莎《东方快车mousha案》的人物关系图(来源:亿图图示模板社区,创作者:小小) 《东方列车mousha案》人物关系图 接下来,我就... -
echarts 关系图节点拖拽
2019-12-03 14:52:15最近做了一个需求,应用关系图,节点可拖拽并保存坐标,本篇记录一下拖拽功能 拖拽代码如下 moveNodes(){ this.myChart.on("mouseup",(params)=>{ //更新节点坐标 staticData.forceData[params.dataIndex].... -
echarts关系图多条连线
2020-07-01 17:42:02最近用echarts做图的关系实现图 数据结构 连接线会重合,解决办法 import Graph from 'echarts/lib/data/Graph' import echarts from 'echarts' const Edge = Graph.Edge const Node = Graph.Node function ...