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

2023-10-17 15:17:35 浏览数 (2)

前言

今天是我的可视化课程上线的第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#。

0 人点赞