NetworkX,网络结构图最强绘制工具·····

NetworkX,网络结构图最强绘制工具·····

前言今天是我的可视化课程上线的第201天,目前学员402人,每篇原创公众号都会记录这个人数,用来督促和激励我的原创内容。目前课程的主要方向是 科研、统计、地理相关的学术性图形绘制方法,后续也会增加商务插图、机器学等、数据分析等方面的课程。

参与课程的你将获取到:学员答疑、可视化资源分享、可视化技巧补充、可视化业务代做(学员和甲方对接)、副业交流、提升认知等等。

Python-NetworkX包介绍今天给大家介绍Python语言中绘制网络结构图的可视化拓展工具-NetworkX包。NetworkX提供了丰富的数据结构和函数,使得用户能够轻松地构建、分析和可视化复杂网络。

安装 NetworkX 你可以使用 pip 命令来安装 NetworkX:代码语言:javascript复制pip install networkx

创建图结构NetworkX 允许你创建不带权重或带权重的图,有向图或无向图。例如,创建一个简单的无向图:

代码语言:javascript复制import networkx as nx

# 创建一个无向图

G = nx.Graph()

G.add_nodes_from([1, 2, 3])

G.add_edges_from([(1, 2), (2, 3)])

可视化图结构NetworkX 提供了多种方法来可视化图结构。其中,networkx.draw() 函数是最基本的方法:

代码语言:javascript复制import matplotlib.pyplot as plt

# 可视化无向图

nx.draw(G, with_labels=True, node_color='skyblue', node_size=2000, font_size=20)

plt.show()

自定义图的可视化你可以自定义图的可视化,包括节点颜色、大小、标签等。例如,设置节点颜色、标签和边的样式:

代码语言:javascript复制# 自定义节点颜色和标签

node_color = ['red', 'green', 'blue']

labels = {1: 'Node 1', 2: 'Node 2', 3: 'Node 3'}

# 绘制自定义样式的图

nx.draw(G, with_labels=True, labels=labels, node_color=node_color, node_size=2000, font_size=20, font_color='white', edge_color='gray')

plt.show()

可视化案例代码语言:javascript复制import networkx as nx

import matplotlib.pyplot as plt

G = nx.Graph()

G.add_edge(1, 2)

G.add_edge(1, 3)

G.add_edge(1, 5)

G.add_edge(2, 3)

G.add_edge(3, 4)

G.add_edge(4, 5)

# explicitly set positions

pos = {1: (0, 0), 2: (-1, 0.3), 3: (2, 0.17), 4: (4, 0.255), 5: (5, 0.03)}

options = {

"font_size": 36,

"node_size": 3000,

"node_color": "white",

"edgecolors": "black",

"linewidths": 5,

"width": 5,

}

nx.draw_networkx(G, pos, **options)

# Set margins for the axes so that nodes aren't clipped

ax = plt.gca()

ax.margins(0.20)

plt.axis("off")

plt.show()

基础案例01

代码语言:javascript复制import matplotlib.pyplot as plt

import networkx as nx

# A rainbow color mapping using matplotlib's tableau colors

node_dist_to_color = {

1: "tab:red",

2: "tab:orange",

3: "tab:olive",

4: "tab:green",

5: "tab:blue",

6: "tab:purple",

}

# Create a complete graph with an odd number of nodes

nnodes = 13

G = nx.complete_graph(nnodes)

# A graph with (2n + 1) nodes requires n colors for the edges

n = (nnodes - 1) // 2

ndist_iter = list(range(1, n + 1))

# Take advantage of circular symmetry in determining node distances

ndist_iter += ndist_iter[::-1]

def cycle(nlist, n):

return nlist[-n:] + nlist[:-n]

# Rotate nodes around the circle and assign colors for each edge based on

# node distance

nodes = list(G.nodes())

for i, nd in enumerate(ndist_iter):

for u, v in zip(nodes, cycle(nodes, i + 1)):

G[u][v]["color"] = node_dist_to_color[nd]

pos = nx.circular_layout(G)

# Create a figure with 1:1 aspect ratio to preserve the circle.

fig, ax = plt.subplots(figsize=(8, 8))

node_opts = {"node_size": 500, "node_color": "w", "edgecolors": "k", "linewidths": 2.0}

nx.draw_networkx_nodes(G, pos, **node_opts)

nx.draw_networkx_labels(G, pos, font_size=14)

# Extract color from edge data

edge_colors = [edgedata["color"] for _, _, edgedata in G.edges(data=True)]

nx.draw_networkx_edges(G, pos, width=2.0, edge_color=edge_colors)

ax.set_axis_off()

fig.tight_layout()

plt.show()

基础案例02

代码语言:javascript复制import matplotlib.pyplot as plt

import networkx as nx

G = nx.balanced_tree(3, 5)

pos = nx.nx_agraph.graphviz_layout(G, prog="twopi", args="")

plt.figure(figsize=(8, 8))

nx.draw(G, pos, node_size=20, alpha=0.5, node_color="blue", with_labels=False)

plt.axis("equal")

plt.show()

Circular Tree

其他案例如下:

Betweenness Centrality

Beam Search

Atlas

更多关于NetworkX包的用法和案例可参考:NetworkX包官网[1]

另:本人编写的《科研论文配图绘制指南-基于Python》一书也在修正和新增内容中,也会增加更多关于NetworkX包绘制科研图形的案例。

如何快速的掌握科研绘图技巧?如何快速的掌握科研绘图技巧?可以考虑以下几点:

学习基本工具和软件: 先熟悉常用的科研绘图工具和软件,例如Python或者R语言等,选择一款适合你的工具。参考教程和指南: 在线教程、视频教程和指南是学习的好资源。模仿和实践: 查看优秀的科研绘图范例,模仿它们的风格和技巧。同时,勤练手,多做练习,实践是提高技能的关键。了解图表类型和用途: 了解不同类型的科研图表,例如折线图、柱状图、散点图等,以及它们在传达信息方面的优缺点。注重细节和清晰性: 细节决定成败,确保图表的字体清晰、线条精细、标签明了,避免视觉混乱。遵循学术规范: 遵循学术期刊或机构对图表的规定和要求,包括字体大小、图表标题、坐标轴标签等。请教专家或同事: 有条件的同学可以跟随一个大佬进行系统学习,向他们寻求指导和建议,可以加速你的学习过程。这里笔者建议,在资金允许的前提下,可以报名一个长期有效的可视化课程,别报名那种合集资料、没后期服务的课程。建议参加那种作者本人录制视频、有详细代码和数据、有后期服务、有观课平台(如果这个都没有,真的不建议大家购买,说的再好都不要购买)。如果课程持续更新的最好,最好课程本人有一定影响力(比如出书或者大V),那样自己的权益也会收到保障。

参考资料

[1]

NetworkX包官网: https://networkx.org/documentation/stable/index.html#。

相关推荐

光遇一直在加载怎么办 进不去游戏的解决方法
office365输入账号

光遇一直在加载怎么办 进不去游戏的解决方法

📅 07-26 ⭐ 479
王者荣耀:一局游戏时长及荣耀时刻详解
www.365bet.com亚洲版

王者荣耀:一局游戏时长及荣耀时刻详解

📅 09-15 ⭐ 7312
《cf》语音麦克风上面有一个消息标志说不了话怎么办?
OrangePi AIpro测评
office365输入账号

OrangePi AIpro测评

📅 12-12 ⭐ 7807
黑鐵王座:作品簡介,作品榮譽,作品目錄,
365bet中文客服

黑鐵王座:作品簡介,作品榮譽,作品目錄,

📅 07-14 ⭐ 4176
dc是什么职位的缩写
365bet中文客服

dc是什么职位的缩写

📅 01-04 ⭐ 4619
推荐阅读 ❤️