这里有一个解决方案,您只使用networkx来创建多层图,并且您可以自己计算节点位置。在
为了解释这个问题,我们随机创建了一个由30个节点组成的小图。在
层是具有附加属性的子图:(x,y)坐标和颜色。
坐标用于在二维网格中相对定位图层。在import networkx as nx
# create a random graph of 30 nodes
graph = nx.fast_gnp_random_graph(30, .2, seed=2019)
# Layers have coordinates and colors
layers = [
(nx.Graph(), (0, 0), "#ffaaaa"),
(nx.Graph(), (0, 1), "#aaffaa"),
(nx.Graph(), (0, 2), "#aaaaff"),
(nx.Graph(), (1, 2), "#ffa500"),
]
每个层都填充了主图形的节点。
在这里,我们决定将节点列表分成不同的范围(图中节点的开始和结束索引)。在
每个节点的颜色存储在颜色映射中。
此变量将在稍后的图形绘制过程中使用。在
^{pr2}$
然后,我们可以计算出每个节点的位置。
根据层坐标移动节点位置。在# Calculate and move the nodes position
all_pos = {}
for layer, (sx, sy), color in layers:
pos = nx.circular_layout(layer, scale=2) # or spring_layout...
for node in pos:
all_pos[node] = pos[node]
all_pos[node] += (10 * sx, 10 * sy)
我们现在可以绘制图表:import matplotlib.pyplot as plt
# Draw and display the graph
nx.draw(graph, all_pos, node_size=500, node_color=color_map, with_labels=True)
plt.show()
结果如下:
当然,您可以使用三维栅格并使用投影来进行类似于三维的预览。在