导入数据集画人物关系图
利用三国人物关系数据集,利用NetworkX生成可视化图,让刘备、曹操和孙权处于中心位置。
我们先来看几个重要的参数
G
(必填参数)
类型: networkx.Graph
或其子类实例
作用: 指定要绘制的图对象。这是您要可视化的网络结构,包括节点、边以及可能附加的属性。
pos
(可选参数)
类型: dict
或 nx.layout.Layout
作用: 定义节点的位置。通常是一个字典,其中键是节点,值是对应的二维坐标(如 (x, y)
)。如果未提供,draw()
会自动应用一个布局算法(如 spring_layout
、circular_layout
等)来确定节点的位置。也可以直接提供一个 nx.layout.Layout
对象,该对象已包含节点的位置信息。
with_labels
(可选参数)
类型: bool
作用: 控制是否在图中显示节点标签。如果设置为 True
,节点名称或自定义标签(如果已设置)将被显示在相应节点附近。默认通常是 False
。
辅助参数:
node_color
, node_size
, node_shape
, node_edgecolor
, node_facecolor
, node_zorder
(等)
类型: 各自对应的数据类型(例如颜色字符串、数值、形状字符串、Z-order 整数等)
作用: 设置节点的各种可视化属性,如颜色、大小、形状、边缘颜色、填充颜色及 Z-order 层叠顺序。这些参数允许您根据节点属性或自定义规则个性化节点的外观。
edge_color
, width
, style
, alpha
, edge_zorder
(等)
类型: 各自对应的数据类型(例如颜色字符串、数值、线条样式字符串、透明度浮点数、Z-order 整数等)
作用: 控制边的视觉特性,包括颜色、线宽、线型(如实线、虚线、点线等)、透明度以及 Z-order 层叠顺序。这些参数有助于区分不同类型的边或突出特定边。
labels
(可选参数)
类型: dict
或 callable
作用: 提供节点标签的自定义映射。如果是一个字典,键是节点,值是标签文本。如果是一个可调用对象,它接受节点作为输入并返回相应的标签文本。这允许您覆盖节点原有的标签或动态生成标签。
font_size
, font_weight
, font_family
, font_color
(等)
类型: 字符串或数值
作用: 设置节点标签和其他文本元素的字体属性,如字号、粗细、字体家族和颜色。这些参数确保标签清晰易读且与整体绘图风格协调。
ax
(可选参数)
类型: matplotlib.axes.Axes
作用: 指定要在哪个 matplotlib
的 Axes
对象上绘制图。如果您正在在一个复杂的绘图环境中工作,可以利用此参数将网络图添加到现有的坐标轴中,而不是创建一个新的图形窗口。
arrows
, arrowstyle
, arrowsize
, connectionstyle
, connector
(等)
类型: 各自对应的数据类型(例如布尔值、字符串、数值等)
作用: 控制边箭头的绘制,包括是否显示箭头、箭头样式、大小、连接线段的样式以及自定义连接器。这些参数对于强调图的有向性或增强视觉效果非常有用。
bbox
, pad
, frameon
(等)
类型: 各自对应的数据类型(例如 matplotlib.transforms.Bbox
, 数值, 布尔值等)
作用: 调整图形周围边框(边界框)的属性,如尺寸、内边距和是否显示背景框架。这些参数有助于控制图的整体布局和美观。
其他高级参数:
nodelist
, edgelist
, linewidths
, edgecolors
, widths
, heights
, depths
, kws
(等)
类型: 列表、数组、字典或其他数据类型,视具体参数而定
作用: 这些参数允许您对特定节点、边或整个图的某些方面进行更精细的控制,如选择要绘制的节点和边子集、设置特定边的线宽和颜色、控制三维布局的维度参数等。kws
是一个字典,可以传递给底层 matplotlib
函数以进一步自定义绘图行为。
好,接下来,我们直接来看源代码:
导入包包
import networkx as nx
import pandas as pd
import matplotlib.pyplot as plt
导入数据库
df_relations = pd.read_csv('triples.csv')
df_relations
取出相应数据
for _, row in df_relations.iterrows():
a,b,c,d=row
print(f'a:{a},b:{b},c:{c},d:{d}')
创建空图
G = nx.Graph()
for _, row in df_relations.iterrows():
person_A, person_B,relationship_english, relationship = row
G.add_node(person_A)
G.add_node(person_B)
G.add_edge(person_A, person_B, type=relationship)
center_nodes = ['刘备', '曹操', '孙权']
# 使用你喜欢的布局算法,这里以spring_layout为例
pos = nx.spring_layout(G, k=0.6, iterations=50)
# 手动调整中心节点的位置
center_pos = {'刘备': (0, 0), '曹操': (-0.2, 0), '孙权': (0.2, 0)}
for node, coord in center_pos.items():
pos[node] = coord
# 可以微调其他节点的位置以避免过于拥挤
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']='SimHei'
plt.rcParams['axes.unicode_minus']=False
node_colors = [ 'lightblue' if node in center_nodes else 'white' for node in G.nodes()]
node_sizes = [1000 if node in center_nodes else 300 for node in G.nodes()]
fig=plt.figure(figsize=(16, 16))
nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=node_sizes)
nx.draw_networkx_edges(G, pos, alpha=0.5)
nx.draw_networkx_labels(G, pos, font_size=10)
plt.axis('off')
plt.title('三国人物关系图')
plt.show()
fig.savefig('三国人物关系图.jpg')
然后这就Ok了,
利用NetworkX生成全连接神经网络图,该神经网络有三层,输入层、隐藏层和输出层神经元分别为3,8,2.
话不多说了,直接来源代码
# -*- coding:utf-8 -*-
import networkx as nx
import matplotlib.pyplot as plt
# 创建DAG
G = nx.DiGraph()
# 顶点列表
vertex_list_I = ['I' + str(i) for i in range(3)]
vertex_list_H = ['H' + str(i) for i in range(8)]
vertex_list_O = ['O' + str(i) for i in range(2)]
# 添加顶点
G.add_nodes_from(vertex_list_I)
G.add_nodes_from(vertex_list_H)
G.add_nodes_from(vertex_list_O)
# 边列表
edge_list = [
('I0', 'H0'),
('I0', 'H1'),
('I0', 'H2'),
('I0', 'H3'),
('I0', 'H4'),
('I0', 'H5'),
('I0', 'H6'),
('I0', 'H7'),
('I1', 'H0'),
('I1', 'H1'),
('I1', 'H2'),
('I1', 'H3'),
('I1', 'H4'),
('I1', 'H5'),
('I1', 'H6'),
('I1', 'H7'),
('I2', 'H0'),
('I2', 'H1'),
('I2', 'H2'),
('I2', 'H3'),
('I2', 'H4'),
('I2', 'H5'),
('I2', 'H6'),
('I2', 'H7'),
('H0', 'O0'),
('H0', 'O1'),
('H1', 'O0'),
('H1', 'O1'),
('H2', 'O0'),
('H2', 'O1'),
('H3', 'O0'),
('H3', 'O1'),
('H4', 'O0'),
('H4', 'O1'),
('H5', 'O0'),
('H5', 'O1'),
('H6', 'O0'),
('H6', 'O1'),
('H7', 'O0'),
('H7', 'O1'),
]
# 通过列表形式来添加边
G.add_edges_from(edge_list)
# 指定绘制DAG图时每个顶点的位置
pos = {
'I0': (-2, -0.8),
'I1': (-2, -1.8),
'I2': (-2, -2.8),
'H0': (-1, 2),
'H1': (-1, 1),
'H2': (-1, 0),
'H3': (-1, -1),
'H4': (-1, -2),
'H5': (-1, -3),
'H6': (-1, -4),
'H7': (-1, -5),
'O0': (0, -1),
'O1': (0, -2),
}
node_colors = [
"red" if _ == "I" else "green" if _ == "H" else "blue"
for _, data in G.nodes()
]
# 绘制DAG图
plt.figure(figsize=(16,8))
plt.title('neural network') #图片标题
plt.xlim(-2.2, 2.2) #设置X轴坐标范围
# plt.ylim(-3, 3) #设置Y轴坐标范围
nx.draw(
G,
pos=pos, # 点的位置
node_color=node_colors, # 顶点颜色
edge_color='black', # 边的颜色
with_labels=True, # 显示顶点标签
font_size=10, # 文字大小
node_size=300 # 顶点大小
)
# 显示图片
plt.show()