如果你知道如何使用Matplotlib,那么你可能能够在不了解NetworkX的情况下回答。
我有两个网络要使用NetworkX绘制,并且希望在单个图形中并排绘制它们,显示每个轴。基本上,这是在Matplotlib中创建2个子图的问题(这是NetworkX用于绘制图形的库)。
每个网络节点的位置分布在[0,area_size]范围内,但通常不存在x = 0.0或y = area_size的坐标点。也就是说,点出现在[0,area_size]或更小的区域内。不会更大。
每个子图的比例应为0.8 x 1.0,由0.16 x 1.0的比例区域分隔开。
实际上,它应该像这样(假设area_size = 100)。
节点位置是这样生成、存储和分配的。
这些位置信息会被存储在一个字典中:
目前,我执行以下操作:
我可能需要一些更好的程序来绘制适当的子图。
我还注意到,当我导出为pdf时,设置的图形大小并不总是被尊重。
NetworkX用于绘制图形的函数是这些,特别是我正在使用draw_networkx。
如果它们带来太多麻烦,我并不介意绘制单独的轴。
我有两个网络要使用NetworkX绘制,并且希望在单个图形中并排绘制它们,显示每个轴。基本上,这是在Matplotlib中创建2个子图的问题(这是NetworkX用于绘制图形的库)。
每个网络节点的位置分布在[0,area_size]范围内,但通常不存在x = 0.0或y = area_size的坐标点。也就是说,点出现在[0,area_size]或更小的区域内。不会更大。
每个子图的比例应为0.8 x 1.0,由0.16 x 1.0的比例区域分隔开。
实际上,它应该像这样(假设area_size = 100)。
节点位置是这样生成、存储和分配的。
# generate and store node positions
positions = {}
for node_id in G.nodes():
pos_x = # generate pos_x in [0.0, area_size]
pos_y = # generate pos_y in [0.0, area_size]
positions[node_id]['x'] = pos_x
positions[node_id]['y'] = pos_y
G.node[node_id]['x'] = pos_x
G.node[node_id]['y'] = pos_y
这些位置信息会被存储在一个字典中:
pos = {node_id: (x, y), ...}
。 NetworkX 会使用该结构来以正确的位置绘制节点:nx.draw_network(G, pos=positions)
。目前,我执行以下操作:
- 计算第一个网络在[0,area_size]区间内的位置,然后将其拉伸到[0, area_size*0.8]
- 用相同的方式计算第二个网络的位置
- 将第二个网络的位置向右移动,将x坐标相加area_size*0.8 + area_size*0.16
- 设置图像的大小(以英寸为单位)
plt.figure(figsize=(h,w), dpi=100)
- 设置x轴
plt.xlim(0.0, area_size*0.8*2 + area_size*0.16)
- 设置y轴
plt.ylim(0.0, area_size)
- 绘制第一个网络(传递其位置)
- 绘制第二个网络(传递其位置)
- 在两个网络之间画线
我可能需要一些更好的程序来绘制适当的子图。
我还注意到,当我导出为pdf时,设置的图形大小并不总是被尊重。
NetworkX用于绘制图形的函数是这些,特别是我正在使用draw_networkx。
如果它们带来太多麻烦,我并不介意绘制单独的轴。
ax
关键字参数传递给draw_networkx
。 - tacaswellax
来绘制我所描述的2个网络。此外,这两个网络之间还有连接线。 - Agostino