微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pyvis 图不会停止移动

如何解决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 举报,一经查实,本站将立刻删除。