Pyvis 图不会停止移动

问题描述

我正在尝试创建一个项目,在该项目中我从 Python 项目创建图表。 我有这个代码

import os
import sys
import re
import networkx as nx
from pyvis.physics import Physics
from radon.visitors import ComplexityVisitor

from pyvis.network import Network

rootDir ="/home/ask/Git/Zeeguu-API"
depth = int(sys.argv[1])
class directory:
    def __init__(self,path,ParentDir = None,ChildrenDirs = [],PyChildren = []) -> None:
        self.path = path
        self.parentDir = ParentDir
        self.pyChildren = ChildrenDirs
        self.pyChildren = PyChildren


def getComplexityoffile(file : str):
    f = open(file,"r")
    s = f.read()
    return ComplexityVisitor.from_code(s).total_complexity        
 
def getParentOfDir(dir: str):
    cutlast = dir.split("/")[:-1]
    join = "/".join(cutlast)
    if join:
        return join
    else:
        return "./"

def extract_importandClass_from_line(unline):

    x = re.search("^import (\S+)",unline) 
    x = re.search("^from (\S+)",unline) 
    return x.group(1)#,c.group(1).split('(')[0]



def getimportsforfile(file):
    lines = [line for line in open(file)]
    classes = []
    all_imports = []

        
    for line in lines:
        try:
            imports = extract_importandClass_from_line(line)
            tmp = imports.rsplit('.',1)
            importEnd = tmp[-1]
            # importsimports
            importsFormatted = imports.replace('.','/')
            finalimport = importsFormatted[1:] if importsFormatted.startswith('/') else importsFormatted
            all_imports.append(importsFormatted)
        except:
            continue
            
  
    return all_imports

NodesAndComplexity = {} # (node/complexity in folder)

# ting jeg vil bruge til at holdestyr på dependencies
Map_Dirs_And_Files_To_displaybledirs = {}
pythonFile_to_imports = {} # (Fille importing,file/dir imported)




dirsFordisplay = set()
# mapping files to parent directories
parenDirtochildDir = {} # (parent,[list of children])
G = nx.DiGraph()
isRoot = True
for root,dirs,files in os.walk(rootDir):
    pyfiles = list(filter(lambda a : a.endswith('.py'),files)) 
    thisDir = root.replace(rootDir,'')
    splitDIR = thisDir[1:].split("/")[:depth]
    if not isRoot:
        displayableDir = "/" + "/".join(splitDIR)
    else:
        displayableDir = "./"
        isRoot = False
    # if there is python files on this directory 

    referentialDIr = thisDir[1:] if thisDir.startswith('/') else thisDir

    Map_Dirs_And_Files_To_displaybledirs[referentialDIr] = displayableDir

    if (pyfiles):
        accumulateComplexity = 0
        for f in pyfiles:
            filepath = root + "/"+ f
            imports = getimportsforfile(filepath)
            logFile = thisDir + "/" + f[:-3]
            accumulateComplexity = accumulateComplexity + getComplexityoffile(filepath)

            removedslashFromLogfile = logFile[1:] if logFile.startswith('/') else logFile
            Map_Dirs_And_Files_To_displaybledirs[removedslashFromLogfile] = displayableDir
            pythonFile_to_imports[removedslashFromLogfile] = imports

        if displayableDir not in NodesAndComplexity:
            NodesAndComplexity[displayableDir] = accumulateComplexity
        else:
            NodesAndComplexity[displayableDir] = NodesAndComplexity[displayableDir] + accumulateComplexity


        if (displayableDir not in dirsFordisplay):
            dirsFordisplay.add(thisDir)
            G.add_node(displayableDir,Physics=False)
            if not isRoot and displayableDir != "./":
                parent = getParentOfDir(displayableDir)
                G.add_edge(parent,displayableDir)


# setting node sizes
for importingfile,importlist in  pythonFile_to_imports.items():

    for importt in importlist:
        if importt in Map_Dirs_And_Files_To_displaybledirs:
            fromf = Map_Dirs_And_Files_To_displaybledirs[importingfile]
            to =  Map_Dirs_And_Files_To_displaybledirs[importt]
            if fromf != to:
                G.add_edge(Map_Dirs_And_Files_To_displaybledirs[importingfile],Map_Dirs_And_Files_To_displaybledirs[importt],color="red")

for node,complexity in NodesAndComplexity.items():
    complexixtydisplay = complexity / 2
    G.nodes[node]["size"] = complexixtydisplay


displayer = Network(directed=True,height="1500px",width="100%")


displayer.from_nx(G)
displayer.barnes_hut(overlap=1)

displayer.show_buttons(filter_=["physics"])
displayer.show("pik.html")   

这很好地创建了图形。然而,当我创建它时,图表在我的屏幕上飞来飞去,无法真正看到它。

如果我删除 displayer.barnes_hut(overlap=1),那么它不会移动,但是节点都只是堆积在彼此的顶部,并且再次无法破译该图。

如何获得既保持(合理)静止又可读的图表?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)