Converting dot to png in python

前端 未结 7 1973
轻奢々
轻奢々 2020-12-02 22:58

I have a dot file generated from my code and want to render it in my output. For this i have seen on the net that the command is something like this on cmd

相关标签:
7条回答
  • 2020-12-02 23:17

    pydot needs the GraphViz binaries to be installed anyway, so if you've already generated your dot file you might as well just invoke dot directly yourself. For example:

    from subprocess import check_call
    check_call(['dot','-Tpng','InputFile.dot','-o','OutputFile.png'])
    
    0 讨论(0)
  • 2020-12-02 23:18

    You can use graphviz:

    # Convert a .dot file to .png
    from graphviz import render
    render('dot', 'png', 'fname.dot')
    
    # To render an existing file in a notebook
    from graphviz import Source
    Source.from_file("fname.dot")
    
    0 讨论(0)
  • 2020-12-02 23:18

    The easiest way to convert dot to png in python is the following:

    from graphviz import render

    render('dot', 'png', 'filename.dot')

    answer was inspired by Sam Perry

    0 讨论(0)
  • 2020-12-02 23:29

    1st Solution)

    Going further with the approach of @Mauricio Carrero by setting the PATH inside the script (the same PATH set in the environment variables does not have this effect!):

    import os
    import pydotplus
    from sklearn.tree import export_graphviz
    
    os.environ['PATH'] = os.environ['PATH']+';' + r'C:\Users\Admin\Anaconda3\Library\bin\graphviz'
    
    # first export the dot file only if needed
    export_graphviz(clf, out_file=filename + ".dot", feature_names = feature_names)
    # now generate the dot_data again
    dot_data = export_graphviz(clf, out_file=None, feature_names = feature_names)
    graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
    graph.write_png(filename + "_gv.png")
    

    This made it possible to save the dot_data to png. Choose your own local paths, you might also have installed graphviz in `C:/Program Files (x86)/Graphviz2.38/bin/

    This solution also came from Sarunas answer here: https://datascience.stackexchange.com/questions/37428/graphviz-not-working-when-imported-inside-pydotplus-graphvizs-executables-not

    2nd Solution)

    You can also avoid the error

    Exception has occurred: InvocationException
    GraphViz's executables not found
    

    by simply giving it what it wants, as it asks for the executables of the graphviz object:

    graph = pydotplus.graphviz.graph_from_dot_data(dot_data)
    # graph is now a new Dot object!
    # That is why we need to set_graphviz_executables for every new instance
    # This cannot be set globally but must be set again and again
    # that is why the PATH solution (1st Solution) above seems much better to me
    # see the docs in https://pydotplus.readthedocs.io/reference.html
    pathCur = 'C:\\Program Files (x86)\\Graphviz2.38\\bin\\'
    graph.set_graphviz_executables({'dot': pathCur+'dot.exe', 'twopi': pathCur +'twopi.exe', 'neato': pathCur+'neato.exe', 'circo': pathCur+'circo.exe', 'fdp': pathCur+'fdp.exe'})
    graph.write_png(filename + "_gv.png")
    

    p.s: These 2 approaches were the only solutions working for me after 2 hours of calibrating erroneuos installations and full uninstall and install again, all varieties of PATH variables, external and internal graphviz installation, python-graphviz, pygraphviz and all of the solutions I could find in here, or in Convert decision tree directly to png or in https://datascience.stackexchange.com/questions/37428/graphviz-not-working-when-imported-inside-pydotplus-graphvizs-executables-not?newreg=a789aadc5d4b4975949afadd3919fe55

    For conda python-graphviz, I got constant installation errors like

    InvalidArchiveError('Error with archive C:\\Users\\Admin\\Anaconda3\\pkgs\\openssl-1.1.1d-he774522_20ffr2kor\\pkg-openssl-1.1.1d-he774522_2.tar.zst.  You probably need to delete and re-download or re-create this file.  Message from libarchive was:\n\nCould not unlink')
    

    For conda install graphviz, I got

    InvalidArchiveError('Error with archive C:\\Users\\Admin\\Anaconda3\\pkgs\\openssl-1.1.1d-he774522_21ww0bpcs\\pkg-openssl-1.1.1d-he774522_2.tar.zst.  You probably need to delete and re-download or re-create this file.  Message from libarchive was:\n\nCould not unlink')
    

    pygraphviz needs MS Visual C++ which I did not want to install:

    error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
    

    In the end, no guide was working to really set the PATH variables correctly except for the 1st Solution approach.

    0 讨论(0)
  • 2020-12-02 23:31

    You can try:

    import os
    os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'
    os.system('dot -Tpng random.dot -o random.png')
    
    0 讨论(0)
  • 2020-12-02 23:34

    You can use pygraphviz. Once you have a graph loaded, you can do

    graph.draw('file.png')
    
    0 讨论(0)
提交回复
热议问题