How to get high resolution images with PyDotPlus and Graphviz?












0















I Need to export some high-resolution visualization of decision trees. Graphviz works perfectly to create the images, and I used PyDotPlus to tweak the colors, but I couldn't find a way to export them in high resolution (at least FullHD).



I tried this, but apparently after I use PyDotPlus the object is no longer a dot-type, so simple shell command did not work. Here is the code.



from sklearn.datasets import load_iris
import pydotplus
import numpy
iris = load_iris()

FEATURES = ['Sepal length (cm)','Sepal width (cm)','Petal length (cm)','Petal width (cm)']
CLASS = ['Iris setosa','Iris versicolor','Iris virginica']

# Model
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier(max_depth=1)

# Train
model.fit(iris.data, iris.target)

from sklearn.tree import export_graphviz
dot_data = export_graphviz(model,
feature_names=FEATURES,
out_file=None,
class_names = CLASS,
filled=True,
proportion = False,
precision = 2,
rounded=True,
)

graph = pydotplus.graph_from_dot_data(dot_data)
nodes = graph.get_node_list()

colors = ('lightskyblue3', 'green2', 'lightcoral', 'white')

for node in nodes:
if node.get_name() not in ('node', 'edge'):
values = model.tree_.value[int(node.get_name())][0]
#color only nodes where only one class is present
if max(values) == sum(values):
node.set_fillcolor(colors[numpy.argmax(values)])
#mixed nodes get the default color
else:
node.set_fillcolor(colors[-1])

graph.write_png('Tree.png')

# Display in jupyter notebook
from IPython.display import Image
Image(filename = 'Tree.png')


I though I could tweak the function "write_png", but I did not find any documentation about it. When I use "help", all I get is



Help on function <lambda> in module pydotplus.graphviz:  
<lambda> lambda path, f='png', prog='dot'
Refer to the docstring accompanying the'write' method for more information.


Sorry, I'm aware it seems very naive, but I just could not get around this. The produced images are good for visualization, but not for a paper. Any tips? Thanks in advance.










share|improve this question



























    0















    I Need to export some high-resolution visualization of decision trees. Graphviz works perfectly to create the images, and I used PyDotPlus to tweak the colors, but I couldn't find a way to export them in high resolution (at least FullHD).



    I tried this, but apparently after I use PyDotPlus the object is no longer a dot-type, so simple shell command did not work. Here is the code.



    from sklearn.datasets import load_iris
    import pydotplus
    import numpy
    iris = load_iris()

    FEATURES = ['Sepal length (cm)','Sepal width (cm)','Petal length (cm)','Petal width (cm)']
    CLASS = ['Iris setosa','Iris versicolor','Iris virginica']

    # Model
    from sklearn.tree import DecisionTreeClassifier
    model = DecisionTreeClassifier(max_depth=1)

    # Train
    model.fit(iris.data, iris.target)

    from sklearn.tree import export_graphviz
    dot_data = export_graphviz(model,
    feature_names=FEATURES,
    out_file=None,
    class_names = CLASS,
    filled=True,
    proportion = False,
    precision = 2,
    rounded=True,
    )

    graph = pydotplus.graph_from_dot_data(dot_data)
    nodes = graph.get_node_list()

    colors = ('lightskyblue3', 'green2', 'lightcoral', 'white')

    for node in nodes:
    if node.get_name() not in ('node', 'edge'):
    values = model.tree_.value[int(node.get_name())][0]
    #color only nodes where only one class is present
    if max(values) == sum(values):
    node.set_fillcolor(colors[numpy.argmax(values)])
    #mixed nodes get the default color
    else:
    node.set_fillcolor(colors[-1])

    graph.write_png('Tree.png')

    # Display in jupyter notebook
    from IPython.display import Image
    Image(filename = 'Tree.png')


    I though I could tweak the function "write_png", but I did not find any documentation about it. When I use "help", all I get is



    Help on function <lambda> in module pydotplus.graphviz:  
    <lambda> lambda path, f='png', prog='dot'
    Refer to the docstring accompanying the'write' method for more information.


    Sorry, I'm aware it seems very naive, but I just could not get around this. The produced images are good for visualization, but not for a paper. Any tips? Thanks in advance.










    share|improve this question

























      0












      0








      0


      1






      I Need to export some high-resolution visualization of decision trees. Graphviz works perfectly to create the images, and I used PyDotPlus to tweak the colors, but I couldn't find a way to export them in high resolution (at least FullHD).



      I tried this, but apparently after I use PyDotPlus the object is no longer a dot-type, so simple shell command did not work. Here is the code.



      from sklearn.datasets import load_iris
      import pydotplus
      import numpy
      iris = load_iris()

      FEATURES = ['Sepal length (cm)','Sepal width (cm)','Petal length (cm)','Petal width (cm)']
      CLASS = ['Iris setosa','Iris versicolor','Iris virginica']

      # Model
      from sklearn.tree import DecisionTreeClassifier
      model = DecisionTreeClassifier(max_depth=1)

      # Train
      model.fit(iris.data, iris.target)

      from sklearn.tree import export_graphviz
      dot_data = export_graphviz(model,
      feature_names=FEATURES,
      out_file=None,
      class_names = CLASS,
      filled=True,
      proportion = False,
      precision = 2,
      rounded=True,
      )

      graph = pydotplus.graph_from_dot_data(dot_data)
      nodes = graph.get_node_list()

      colors = ('lightskyblue3', 'green2', 'lightcoral', 'white')

      for node in nodes:
      if node.get_name() not in ('node', 'edge'):
      values = model.tree_.value[int(node.get_name())][0]
      #color only nodes where only one class is present
      if max(values) == sum(values):
      node.set_fillcolor(colors[numpy.argmax(values)])
      #mixed nodes get the default color
      else:
      node.set_fillcolor(colors[-1])

      graph.write_png('Tree.png')

      # Display in jupyter notebook
      from IPython.display import Image
      Image(filename = 'Tree.png')


      I though I could tweak the function "write_png", but I did not find any documentation about it. When I use "help", all I get is



      Help on function <lambda> in module pydotplus.graphviz:  
      <lambda> lambda path, f='png', prog='dot'
      Refer to the docstring accompanying the'write' method for more information.


      Sorry, I'm aware it seems very naive, but I just could not get around this. The produced images are good for visualization, but not for a paper. Any tips? Thanks in advance.










      share|improve this question














      I Need to export some high-resolution visualization of decision trees. Graphviz works perfectly to create the images, and I used PyDotPlus to tweak the colors, but I couldn't find a way to export them in high resolution (at least FullHD).



      I tried this, but apparently after I use PyDotPlus the object is no longer a dot-type, so simple shell command did not work. Here is the code.



      from sklearn.datasets import load_iris
      import pydotplus
      import numpy
      iris = load_iris()

      FEATURES = ['Sepal length (cm)','Sepal width (cm)','Petal length (cm)','Petal width (cm)']
      CLASS = ['Iris setosa','Iris versicolor','Iris virginica']

      # Model
      from sklearn.tree import DecisionTreeClassifier
      model = DecisionTreeClassifier(max_depth=1)

      # Train
      model.fit(iris.data, iris.target)

      from sklearn.tree import export_graphviz
      dot_data = export_graphviz(model,
      feature_names=FEATURES,
      out_file=None,
      class_names = CLASS,
      filled=True,
      proportion = False,
      precision = 2,
      rounded=True,
      )

      graph = pydotplus.graph_from_dot_data(dot_data)
      nodes = graph.get_node_list()

      colors = ('lightskyblue3', 'green2', 'lightcoral', 'white')

      for node in nodes:
      if node.get_name() not in ('node', 'edge'):
      values = model.tree_.value[int(node.get_name())][0]
      #color only nodes where only one class is present
      if max(values) == sum(values):
      node.set_fillcolor(colors[numpy.argmax(values)])
      #mixed nodes get the default color
      else:
      node.set_fillcolor(colors[-1])

      graph.write_png('Tree.png')

      # Display in jupyter notebook
      from IPython.display import Image
      Image(filename = 'Tree.png')


      I though I could tweak the function "write_png", but I did not find any documentation about it. When I use "help", all I get is



      Help on function <lambda> in module pydotplus.graphviz:  
      <lambda> lambda path, f='png', prog='dot'
      Refer to the docstring accompanying the'write' method for more information.


      Sorry, I'm aware it seems very naive, but I just could not get around this. The produced images are good for visualization, but not for a paper. Any tips? Thanks in advance.







      python resolution graphviz pydot






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Dec 30 '18 at 17:22









      AlfamasterAlfamaster

      62




      62
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53979797%2fhow-to-get-high-resolution-images-with-pydotplus-and-graphviz%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53979797%2fhow-to-get-high-resolution-images-with-pydotplus-and-graphviz%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Monofisismo

          Angular Downloading a file using contenturl with Basic Authentication

          Olmecas