Created
September 25, 2016 18:14
-
-
Save oseiskar/6bd5dad7cdbf9c95673b505a302d2613 to your computer and use it in GitHub Desktop.
Proof of Concept: jupyter-scala with embedded images from breeze-viz
This file contains hidden or 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": "markdown", | |
| "metadata": {}, | |
| "source": [ | |
| "### Proof of Concept: jupyter-scala with embedded images from breeze-viz" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stdout", | |
| "output_type": "stream", | |
| "text": [ | |
| "0 new artifact(s)\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "classpath.add(\n", | |
| " \"org.scalanlp\" %% \"breeze\" % \"0.12\",\n", | |
| " \"org.scalanlp\" %% \"breeze-natives\" % \"0.12\",\n", | |
| " \"org.scalanlp\" %% \"breeze-viz\" % \"0.12\")" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "\u001b[36mdisplayPng\u001b[0m: \u001b[32mString\u001b[0m => \u001b[32mUnit\u001b[0m => \u001b[32mUnit\u001b[0m = <function1>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "/* \n", | |
| " * Displays an embedded PNG file\n", | |
| " *\n", | |
| " * The parameter should be a function that writes the displayed\n", | |
| " * graph to a given (temporary) file (file name)\n", | |
| " */\n", | |
| "val displayPng = (writeGraphToFile: String => Unit) => {\n", | |
| " \n", | |
| " import java.util.Base64\n", | |
| " import java.io.File\n", | |
| " import java.nio.file.{Files, Paths}\n", | |
| " \n", | |
| " // get temporary file name (ugly)\n", | |
| " val temp = java.io.File.createTempFile(\"chart\", \".png\")\n", | |
| " val tempFileName : String = temp.getName()\n", | |
| " temp.delete\n", | |
| " \n", | |
| " // write temporary file (assuming only file-name-based API exists)\n", | |
| " writeGraphToFile(tempFileName)\n", | |
| " \n", | |
| " // read temporary file bytes and delete the file\n", | |
| " val byteArray = Files.readAllBytes(Paths.get(tempFileName))\n", | |
| " new File(tempFileName).delete\n", | |
| " \n", | |
| " // convert to base64 and embed PNG\n", | |
| " val base64 = Base64.getEncoder.encodeToString(byteArray)\n", | |
| " display.html(\"<img src=\\\"data:image/png;base64,\"+base64+\"\\\"/>\")\n", | |
| "}" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": { | |
| "collapsed": false | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<img src=\"data:image/png;base64,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\"/>" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| }, | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "\u001b[32mimport \u001b[36mbreeze.linalg._\u001b[0m\n", | |
| "\u001b[32mimport \u001b[36mbreeze.plot._\u001b[0m\n", | |
| "\u001b[36mf\u001b[0m: \u001b[32mFigure\u001b[0m = breeze.plot.Figure@5e90b271\n", | |
| "\u001b[36mp\u001b[0m: \u001b[32mPlot\u001b[0m = breeze.plot.Plot@71de6885\n", | |
| "\u001b[36mx\u001b[0m: \u001b[32mDenseVector\u001b[0m[\u001b[32mDouble\u001b[0m] = DenseVector(0.0, 0.010101010101010102, 0.020202020202020204, 0.030303030303030304, 0.04040404040404041, 0.05050505050505051, 0.06060606060606061, 0.07070707070707072, 0.08080808080808081, 0.09090909090909091, 0.10101010101010102, 0.11111111111111112, 0.12121212121212122, 0.13131313131313133, 0.14141414141414144, 0.15151515151515152, 0.16161616161616163, 0.17171717171717174, 0.18181818181818182, 0.19191919191919193, 0.20202020202020204, 0.21212121212121213, 0.22222222222222224, 0.23232323232323235, 0.24242424242424243, 0.25252525252525254, 0.26262626262626265, 0.27272727272727276, 0.2828282828282829, 0.29292929292929293, 0.30303030303030304, 0.31313131313131315, 0.32323232323232326, 0.33333333333333337, 0.3434343434343435, 0.3535353535353536, 0.36363636363636365, 0.37373737373737376, 0.38383838383838387, 0.393939393939394, 0.4040404040404041, 0.4141414141414142, 0.42424242424242425, 0.43434343434343436, 0.4444444444444445, 0.4545454545454546, 0.4646464646464647, 0.4747474747474748, 0.48484848484848486, 0.494949494949495, 0.5050505050505051, 0.5151515151515152, 0.5252525252525253, 0.5353535353535354, 0.5454545454545455, 0.5555555555555556, 0.5656565656565657, 0.5757575757575758, 0.5858585858585859, 0.595959595959596, 0.6060606060606061, 0.6161616161616162, 0.6262626262626263, 0.6363636363636365, 0.6464646464646465, 0.6565656565656566, 0.6666666666666667, 0.6767676767676768, 0.686868686868687, 0.696969696969697, 0.7070707070707072, 0.7171717171717172, 0.7272727272727273, 0.7373737373737375, 0.7474747474747475, 0.7575757575757577, 0.7676767676767677, 0.7777777777777778, 0.78787\u001b[33m...\u001b[0m\n", | |
| "\u001b[36mres8_6\u001b[0m: \u001b[32mPlot\u001b[0m = breeze.plot.Plot@71de6885\n", | |
| "\u001b[36mres8_7\u001b[0m: \u001b[32mPlot\u001b[0m = breeze.plot.Plot@71de6885" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "// graph example adapted from https://github.com/scalanlp/breeze/wiki/Quickstart\n", | |
| "\n", | |
| "import breeze.linalg._\n", | |
| "import breeze.plot._\n", | |
| "\n", | |
| "val f = Figure()\n", | |
| "f.visible = false // add this to avoid showing an extra plot window\n", | |
| "val p = f.subplot(0)\n", | |
| "val x = linspace(0.0,1.0)\n", | |
| "p += plot(x, x :^ 2.0)\n", | |
| "p += plot(x, x :^ 3.0, '.')\n", | |
| "p.xlabel = \"x axis\"\n", | |
| "p.ylabel = \"y axis\"\n", | |
| "\n", | |
| "displayPng(f.saveas(_))" | |
| ] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Scala 2.11", | |
| "language": "scala211", | |
| "name": "scala211" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": "text/x-scala", | |
| "file_extension": ".scala", | |
| "mimetype": "text/x-scala", | |
| "name": "scala211", | |
| "pygments_lexer": "scala", | |
| "version": "2.11.8" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 1 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment