networkx绘图

本文介绍了如何使用Python库NetworkX从数据集中绘制人物关系图,以三国人物为例,同时展示了如何生成全连接神经网络图。通过展示代码实现,包括参数设置和图形定制,帮助读者理解如何进行网络可视化。
摘要由CSDN通过智能技术生成

导入数据集画人物关系图

利用三国人物关系数据集,利用NetworkX生成可视化图,让刘备、曹操和孙权处于中心位置。

我们先来看几个重要的参数

G (必填参数)

类型networkx.Graph 或其子类实例

作用: 指定要绘制的图对象。这是您要可视化的网络结构,包括节点、边以及可能附加的属性。

pos (可选参数)

类型dict 或 nx.layout.Layout

作用: 定义节点的位置。通常是一个字典,其中键是节点,值是对应的二维坐标(如 (x, y))。如果未提供,draw() 会自动应用一个布局算法(如 spring_layoutcircular_layout 等)来确定节点的位置。也可以直接提供一个 nx.layout.Layout 对象,该对象已包含节点的位置信息。

with_labels (可选参数)

类型bool

作用: 控制是否在图中显示节点标签。如果设置为 True,节点名称或自定义标签(如果已设置)将被显示在相应节点附近。默认通常是 False

辅助参数:

node_colornode_sizenode_shapenode_edgecolornode_facecolornode_zorder (等)

类型: 各自对应的数据类型(例如颜色字符串、数值、形状字符串、Z-order 整数等)

作用: 设置节点的各种可视化属性,如颜色、大小、形状、边缘颜色、填充颜色及 Z-order 层叠顺序。这些参数允许您根据节点属性或自定义规则个性化节点的外观。

edge_colorwidthstylealphaedge_zorder (等)

类型: 各自对应的数据类型(例如颜色字符串、数值、线条样式字符串、透明度浮点数、Z-order 整数等)

作用: 控制边的视觉特性,包括颜色、线宽、线型(如实线、虚线、点线等)、透明度以及 Z-order 层叠顺序。这些参数有助于区分不同类型的边或突出特定边。

labels (可选参数)

类型dict 或 callable

作用: 提供节点标签的自定义映射。如果是一个字典,键是节点,值是标签文本。如果是一个可调用对象,它接受节点作为输入并返回相应的标签文本。这允许您覆盖节点原有的标签或动态生成标签。

font_sizefont_weightfont_familyfont_color (等)

类型: 字符串或数值

作用: 设置节点标签和其他文本元素的字体属性,如字号、粗细、字体家族和颜色。这些参数确保标签清晰易读且与整体绘图风格协调。

ax (可选参数)

类型matplotlib.axes.Axes

作用: 指定要在哪个 matplotlib 的 Axes 对象上绘制图。如果您正在在一个复杂的绘图环境中工作,可以利用此参数将网络图添加到现有的坐标轴中,而不是创建一个新的图形窗口。

arrowsarrowstylearrowsizeconnectionstyleconnector (等)

类型: 各自对应的数据类型(例如布尔值、字符串、数值等)

作用: 控制边箭头的绘制,包括是否显示箭头、箭头样式、大小、连接线段的样式以及自定义连接器。这些参数对于强调图的有向性或增强视觉效果非常有用。

bboxpadframeon (等)

类型: 各自对应的数据类型(例如 matplotlib.transforms.Bbox, 数值, 布尔值等)

作用: 调整图形周围边框(边界框)的属性,如尺寸、内边距和是否显示背景框架。这些参数有助于控制图的整体布局和美观。

其他高级参数:

nodelistedgelistlinewidthsedgecolorswidthsheightsdepthskws (等)

类型: 列表、数组、字典或其他数据类型,视具体参数而定

作用: 这些参数允许您对特定节点、边或整个图的某些方面进行更精细的控制,如选择要绘制的节点和边子集、设置特定边的线宽和颜色、控制三维布局的维度参数等。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()

  • 24
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellostar06

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值