首页 > 解决方案 > 如何有效地绘制一个图,其中每个节点代表欧几里得空间中的一个点?

问题描述

我在 python 中有一个几乎完全连接的图,大约有 3k 个节点和 9M 个边。该图中的每个节点都由 R^3 中的一个点表示,每条边表示它们之间的距离。我尝试遍历所有边缘,并使用 3d 投影使用 matplotlib 绘制它们。像这样的东西:

fig, ax = plt.subplots(ncols = len(network.positions) - 1, subplot_kw={'projection': '3d'})


    for idx in range(len(network.positions) - 1): 
        x = network.positions[idx][0, :].numpy()
        y = network.positions[idx][1, :].numpy()
        z = network.positions[idx][2, :].numpy()
        ax[idx].scatter(x,y,z, alpha = .5, s=.01, label = "layer " + str(idx + 1), c='r')
        

        x = network.positions[idx + 1][0, :].numpy()
        y = network.positions[idx + 1][1, :].numpy()
        z = network.positions[idx + 1][2, :].numpy()
        ax[idx].scatter(x,y,z, alpha = .5, s=.01, label = "layer " + str(idx + 2), c = 'b')

        for idx_1 in tqdm(range(int(network.positions[idx].shape[1]))):
            for idx_2 in range(int(network.positions[idx + 1].shape[1])):
                x_1, y_1, z_1 = network.positions[idx][:, idx_1]
                x_2, y_2, z_2 = network.positions[idx][:, idx_2]
                ax[idx].plot([x_1, x_2], [y_1, y_2], [z_1, z_2])

然而,这是非常低效的——因为对 plt.plot 的调用很多。我需要一种方法,我可以做类似的事情,但通过相应的权重对每条线的颜色或透明度进行加权。

谢谢,阿米特

标签: pythonmathgraphplotly-python

解决方案


推荐阅读