首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyvis图不会停止移动

Pyvis图不会停止移动
EN

Stack Overflow用户
提问于 2021-05-15 15:06:01
回答 1查看 576关注 0票数 1

我正在尝试做一个项目,在这个项目中,我从python项目创建一个图表。我有这个密码

代码语言:javascript
复制
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),那么它就不会移动,但是节点都只是聚集在一起,再一次不可能破译这个图表。

如何获得既静止又可读的图形?

EN

回答 1

Stack Overflow用户

发布于 2022-11-23 06:27:32

show_buttons函数中添加所有按钮,在创建pik.html文件之后,在Google中打开html文件。在按钮选项中有字体类别,可以禁用物理选项

从那时起,节点将不再移动,您可以通过移动节点来按自己的意愿分发节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67548160

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档