Converting dot to png in python

前端 未结 7 2005
轻奢々
轻奢々 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: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.

提交回复
热议问题