Python 如何有效地绘制一个图,其中每个节点代表欧几里德空间中的一个点?

Python 如何有效地绘制一个图,其中每个节点代表欧几里德空间中的一个点?,python,math,graph,plotly-python,Python,Math,Graph,Plotly Python,我在python中有一个几乎完全连通的图,大约有3k个节点和9M条边。此图中的每个节点由R^3中的一个点表示,每条边表示它们之间的距离。我尝试遍历所有边,并使用matplotlib使用3d投影绘制它们。大概是这样的: fig, ax = plt.subplots(ncols = len(network.positions) - 1, subplot_kw={'projection': '3d'}) for idx in range(len(network.positions) - 1

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

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。我需要一种方法,我可以做一些类似的事情,但重量的颜色或透明度,每行相应的重量

谢谢,
Ameet

只需将屏幕上的每个像素都涂成黑色-当你绘制出9米的边缘时,它就是这样的。更严重的是,如果你在R^3中绘制3k点,为什么要绘制“边”来表示它们之间的距离,而它们之间的距离已经由,嗯,它们之间的距离来表示呢?你本来可以更好地回答你的问题。。。边缘的点是最后提到的重量-也许这应该更清楚。我希望权重被表示为透明度,可能会被几个因素缩小,所以你只会看到有点大的权重。欢迎这么做!Ameet,当您有1000个节点/边时,打印不是一个有用的选项,更不用说数百万个了。一个更好的选择是决定你想要传达什么,然后根据需要绘制一个子图。我想看看是否存在子网络(具有高权重的相邻区域)-你知道我如何做到这一点吗@RamNarasimhanYes,正如@RobertDodier所建议的,编辑这个问题或将关于稠密子图的新问题发布到CS StackExchange。