Created
July 23, 2016 13:32
-
-
Save ten0s/59210c3a8454fb8afd8c3a66c150843e to your computer and use it in GitHub Desktop.
Display graphviz dot in Jupyter using IPython2
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 35, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [ | |
"from IPython.display import SVG\n", | |
"from IPython.display import Image" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 36, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Overwriting test.gv\n" | |
] | |
} | |
], | |
"source": [ | |
"%%file test.gv\n", | |
"\n", | |
"digraph {\n", | |
" a -> b\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 37, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg height=\"116pt\" viewBox=\"0.00 0.00 62.00 116.00\" width=\"62pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\"><g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 112)\"><title>%3</title><polygon fill=\"white\" points=\"-4,4 -4,-112 58,-112 58,4 -4,4\" stroke=\"none\"/><!-- a --><g class=\"node\" id=\"node1\"><title>a</title><ellipse cx=\"27\" cy=\"-90\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/><text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-86.3\">a</text></g><!-- b --><g class=\"node\" id=\"node2\"><title>b</title><ellipse cx=\"27\" cy=\"-18\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/><text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-14.3\">b</text></g><!-- a->b --><g class=\"edge\" id=\"edge1\"><title>a->b</title><path d=\"M27,-71.6966C27,-63.9827 27,-54.7125 27,-46.1124\" fill=\"none\" stroke=\"black\"/><polygon fill=\"black\" points=\"30.5001,-46.1043 27,-36.1043 23.5001,-46.1044 30.5001,-46.1043\" stroke=\"black\"/></g></g></svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"execution_count": 37, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"out = !dot -Tsvg test.gv\n", | |
"SVG(\"\".join(out))" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 38, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg height=\"116pt\" viewBox=\"0.00 0.00 62.00 116.00\" width=\"62pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", | |
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 112)\">\n", | |
"<title>%3</title>\n", | |
"<polygon fill=\"white\" points=\"-4,4 -4,-112 58,-112 58,4 -4,4\" stroke=\"none\"/>\n", | |
"<!-- a -->\n", | |
"<g class=\"node\" id=\"node1\"><title>a</title>\n", | |
"<ellipse cx=\"27\" cy=\"-90\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/>\n", | |
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-86.3\">a</text>\n", | |
"</g>\n", | |
"<!-- b -->\n", | |
"<g class=\"node\" id=\"node2\"><title>b</title>\n", | |
"<ellipse cx=\"27\" cy=\"-18\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/>\n", | |
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-14.3\">b</text>\n", | |
"</g>\n", | |
"<!-- a->b -->\n", | |
"<g class=\"edge\" id=\"edge1\"><title>a->b</title>\n", | |
"<path d=\"M27,-71.6966C27,-63.9827 27,-54.7125 27,-46.1124\" fill=\"none\" stroke=\"black\"/>\n", | |
"<polygon fill=\"black\" points=\"30.5001,-46.1043 27,-36.1043 23.5001,-46.1044 30.5001,-46.1043\" stroke=\"black\"/>\n", | |
"</g>\n", | |
"</g>\n", | |
"</svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"execution_count": 38, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"!dot -Tsvg test.gv -o test.svg\n", | |
"SVG(filename=\"test.svg\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 39, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/png": "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\nh2e/Oe83ZwDvNw8S3m/OAN5vzvvNeb85K3i/eQjg/eaM4f3mjOH95iGA95szhvebM4b3mzOG95sz\nhvebM2RW9JtH0m9UUdlv7nA4qKGhgYqKikgikYT9/L6I2n7z8fFxksvlBO99eYIRlf3mMpksIpfA\n8H5zhkzVb+4hM1L6ze9z9epVvPjii0hJSUFRURHOnz8vaB5//eYeMiOl3/w+Bw8exFtvvYUPP/wQ\n7e3tKCoqQmdnp2B5NBoNuru7vY5FbL/5fd57773Jrwu32WzYuXMnGhoa8PnnnwuSx1+/ucczM1L6\nze/z4Peur1u3DgBgMpmEihOd/ebeePTRRwEAGRkZgmWIyn5zb1gsFgDA6tWrBcvgr9/cQ+aD/eZC\ncn9N+8jICIB7KzmampqwcuVKbNu2TbBcUdlv/sknn2Dt2rWoqKjA1q1bUV1djQULFuDYsWM+d2KE\nGuL95uzg/eYM4f3mjOD95gzh/eaM4P3mjOD95ozg/eYM4f3mDOD95ozg/eaM4P3mjOD95gzg/eYM\n4P3mDOD95kHC+82DhPebzxDeb877zdnC+805vuD95izhMhnCZTJECqBZ6BCzhHP/A5fVWGykDAxU\nAAAAAElFTkSuQmCC\n", | |
"text/plain": [ | |
"<IPython.core.display.Image object>" | |
] | |
}, | |
"execution_count": 39, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"!dot -Tpng test.gv -o test.png\n", | |
"Image(filename=\"test.png\")" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 40, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [], | |
"source": [ | |
"%%script dot -Tsvg --out svg\n", | |
"\n", | |
"digraph {\n", | |
" a -> b\n", | |
"}" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 41, | |
"metadata": { | |
"collapsed": false | |
}, | |
"outputs": [ | |
{ | |
"data": { | |
"image/svg+xml": [ | |
"<svg height=\"116pt\" viewBox=\"0.00 0.00 62.00 116.00\" width=\"62pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n", | |
"<g class=\"graph\" id=\"graph0\" transform=\"scale(1 1) rotate(0) translate(4 112)\">\n", | |
"<title>%3</title>\n", | |
"<polygon fill=\"white\" points=\"-4,4 -4,-112 58,-112 58,4 -4,4\" stroke=\"none\"/>\n", | |
"<!-- a -->\n", | |
"<g class=\"node\" id=\"node1\"><title>a</title>\n", | |
"<ellipse cx=\"27\" cy=\"-90\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/>\n", | |
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-86.3\">a</text>\n", | |
"</g>\n", | |
"<!-- b -->\n", | |
"<g class=\"node\" id=\"node2\"><title>b</title>\n", | |
"<ellipse cx=\"27\" cy=\"-18\" fill=\"none\" rx=\"27\" ry=\"18\" stroke=\"black\"/>\n", | |
"<text font-family=\"Times,serif\" font-size=\"14.00\" text-anchor=\"middle\" x=\"27\" y=\"-14.3\">b</text>\n", | |
"</g>\n", | |
"<!-- a->b -->\n", | |
"<g class=\"edge\" id=\"edge1\"><title>a->b</title>\n", | |
"<path d=\"M27,-71.6966C27,-63.9827 27,-54.7125 27,-46.1124\" fill=\"none\" stroke=\"black\"/>\n", | |
"<polygon fill=\"black\" points=\"30.5001,-46.1043 27,-36.1043 23.5001,-46.1044 30.5001,-46.1043\" stroke=\"black\"/>\n", | |
"</g>\n", | |
"</g>\n", | |
"</svg>" | |
], | |
"text/plain": [ | |
"<IPython.core.display.SVG object>" | |
] | |
}, | |
"execution_count": 41, | |
"metadata": {}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": [ | |
"SVG(svg)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 2", | |
"language": "python", | |
"name": "python2" | |
}, | |
"language_info": { | |
"codemirror_mode": { | |
"name": "ipython", | |
"version": 2 | |
}, | |
"file_extension": ".py", | |
"mimetype": "text/x-python", | |
"name": "python", | |
"nbconvert_exporter": "python", | |
"pygments_lexer": "ipython2", | |
"version": "2.7.6" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 0 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment