图论
是一种非常强大的数据科学工具,可让您可视化和理解复杂的交互。NetworkX
是一个用于构建图形的 Python
包,它具有大部分可用的默认值,但利用 matplotlib
允许我们自定义图形的几乎所有可能的方面。 我知道我希望它在我的脑海中是什么样子,但是经过数小时的文档和 StackOverflow
搜索后,我决定为我学会如何改变的所有东西创建这个一站式商店! 现在,您也可以构建可读的图表来帮助可视化复杂的关系。
1. 创建 NetworkX 图
我们将从制作一个基本图表开始! 有几种方法可以做到这一点。 我发现最简单的方法是从你指定边缘的 pandas DataFrame
中。 什么是优势? 好吧,图是使用节点
和边
构建的。 一个节点
代表某个对象,可能是一个人或一个组织,而一条边
代表从一个节点到另一个节点的实际连接。 所以在下面的例子中,“A”、“B”、“C”和“D”是节点,它们之间的线是边。
fig, ax = plt.subplots(figsize=(15,8))
relationships = pd.DataFrame({
'from': ['A', 'A', 'A'],
'to': ['B', 'C', 'D']})
G = nx.from_pandas_edgelist(relationships, 'from', 'to', create_using=nx.Graph())
nx.draw(G, with_labels=True)
2. 节点颜色
我们也可以很容易地改变所有节点的颜色。 您会注意到一种模式,即为图形全局更改特征非常简单(在 .draw()
方法中使用关键字)。
fig, ax = plt.subplots(figsize=(15,8))
relationships = pd.DataFrame({
'from': ['A', 'A', 'A'],
'to': ['B', 'C', 'D']})
G = nx.from_pandas_edgelist(relationships, 'from', 'to', create_using=nx.Graph())
# Set node_color
nx.draw(G, with_labels=True, node_color='red')
3. 节点类型的节点颜色
但是假设我们想根据类型而不是全局更改节点的颜色。 这需要一些设置,但一旦到位,我们可以快速添加新类型并相应地自动着色。 基本上,我们创建另一个 DataFrame
,在其中指定节点 ID 和节点类型,并使用 pd.Categorical()
方法应用颜色图。
所以现在我们的字母节点
是蓝色的,我们的数字节点
是橙色的!
fig, ax = plt.subplots(figsize=(15, 8))
relationships = pd.DataFrame({
'from': ['A', 'A', 'A', '1', '2'],
'to': ['B', 'C', 'D', 'C', 'C']})
# Create DF for node characteristics
carac = pd.DataFrame({
'ID':['A', 'B', 'C', 'D', '1', '2'],
'type':['Letter','Letter', 'Letter', 'Letter',
'Number', 'Number']})
# Create graph object
G = nx.from_pandas_edgelist(relationships, 'from', 'to', create_using=nx.Graph())
# Make types into categories
carac = carac.set_index('ID')
carac = carac.reindex(G.nodes