前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NetworkX,网络结构图最强绘制工具·····

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

作者头像
DataCharm
发布2023-10-17 15:17:35
1.3K0
发布2023-10-17 15:17:35
举报
文章被收录于专栏:数据 学术 商业 新闻

前言

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DataCharm 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Python-NetworkX包介绍
  • 如何快速的掌握科研绘图技巧?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档