{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Let's Go!\n", "=====\n", "\n", "This is a Jupyter notebook --- my first, in fact. Jupyter is an interface to many common scientific computing tools. The ones that give it its name are **Ju**lia, **Pyt**hon, and **R**. (Apparently the **e** was added because \"Jupytr\" looks strange.) Julia is a technical computing language, similar in some respects to `MATLAB`. Python is the computing language that we know and love. R is a statistics and graphics package widely used in data analysis. The makers of Jupyter seem to understand that no single solution exists for all scientific computing needs. So they have created a single interface for many useful open source software packages.\n", "\n", "The primary benefit of Jupyter over command line coding or an IDE like Spyder is that you can integrate text, mathematics, code, and graphics in a single document that can be shared in a variety of formats." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Cells\n", "A notebook is divided into cells. These may contain formatted text, code, or raw input. To execute the contents of a cell, type ``, or select one of the many `Run` options from the `Cell` menu at the top of the page.\n", "\n", "Take a quick look at all of the menu options and `Help > Keyboard Shortcuts` to get an idea of how to interact with a Jupyter notebook." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Text\n", "Text is rendered using the MarkDown language. This allows you to type in plain text and use a few formatting commands to embellish the output when it is rendered. You can also enter raw HTML code if you are so inclined.\n", "\n", "For example, you can emphasize text:\n", "- Typing \"`*italics*`\" or \"`_italics_`\" yields _italics_.\n", "- Typing \"`**boldface**`\" or \"`__boldface__`\" yields **boldface**.\n", "- Typing \"`***bold italics***`\" or \"`___bold italics___`\" yields ***bold italics***.\n", "\n", "You can also create headings, subheadings, and horizontal rules with ease.\n", "\n", " -----\n", " # Title\n", " ## Section\n", " ### Subsection\n", " #### Subsubsection\n", " -----\n", "\n", "produces the following output:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "-----\n", "# Title\n", "## Section\n", "### Subsection\n", "#### Subsubsection\n", "-----" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can do a lot more with MarkDown: insert images, create Web links, cross reference, etc. Just read the [manual](https://daringfireball.net/projects/markdown/basics) or [this cheatsheet](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet#hr)!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Math\n", "You can enter math directly into the notebook. Jupyter uses MathJax, a Java script that implements `LaTeX` commands. You will have to spend a little time learning the `LaTeX` syntax, but once you do, you can have beautiful equations alongside your explanatory text, code, and graphics:\n", "\n", "The golden ratio $\\phi$ is one solution to $x^2 = x + 1$.\n", "\n", "$$ e^{i\\pi} + 1 = 0 $$\n", "\n", "$$ \\int_{-\\infty}^{\\infty} dx \\ e^{-x^2} = \\sqrt{\\pi} $$\n", "\n", "Here is a brief introduction to [`LaTeX` commands in MathJax](http://meta.math.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Code\n", "It is extremely simple to write and run Python code. Create a new cell, and type the Python code just as you would in a script or in another interpreter. When you are finished, you can execute the code in the cell by typing ``:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Hello, world!\n" ] } ], "source": [ "print(\"Hello, world!\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Graphics\n", "If your code generates graphics, you can display them in the notebook as well. First, you need to specify that graphics will be \"inline\". Otherwise, they will be handled by another graphics backend, outside of your notebook." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "# This will force graphics to be displayed in the notebook.\n", "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, you can create plots that will show up right below the code:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(-0.5, 1.25)" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(-2,2,101)\n", "y = (1-x**2)*np.exp(-x**2)\n", "\n", "plt.plot(x,y,'b-', lw=3)\n", "plt.xlim(-2,2)\n", "plt.ylim(-0.5,1.25)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If you are using IPython 3.0 or later, you can even create interactive graphics in your notebook. This allows you to zoom, re-center, resize, and save the figure. You can also rotate the axes of 3D figures." ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# This will create interactive plots.\n", "%matplotlib notebook" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "application/javascript": [ "/* Put everything inside the global mpl namespace */\n", "window.mpl = {};\n", "\n", "mpl.get_websocket_type = function() {\n", " if (typeof(WebSocket) !== 'undefined') {\n", " return WebSocket;\n", " } else if (typeof(MozWebSocket) !== 'undefined') {\n", " return MozWebSocket;\n", " } else {\n", " alert('Your browser does not have WebSocket support.' +\n", " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", " 'Firefox 4 and 5 are also supported but you ' +\n", " 'have to enable WebSockets in about:config.');\n", " };\n", "}\n", "\n", "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", " this.id = figure_id;\n", "\n", " this.ws = websocket;\n", "\n", " this.supports_binary = (this.ws.binaryType != undefined);\n", "\n", " if (!this.supports_binary) {\n", " var warnings = document.getElementById(\"mpl-warnings\");\n", " if (warnings) {\n", " warnings.style.display = 'block';\n", " warnings.textContent = (\n", " \"This browser does not support binary websocket messages. \" +\n", " \"Performance may be slow.\");\n", " }\n", " }\n", "\n", " this.imageObj = new Image();\n", "\n", " this.context = undefined;\n", " this.message = undefined;\n", " this.canvas = undefined;\n", " this.rubberband_canvas = undefined;\n", " this.rubberband_context = undefined;\n", " this.format_dropdown = undefined;\n", "\n", " this.image_mode = 'full';\n", "\n", " this.root = $('
');\n", " this._root_extra_style(this.root)\n", " this.root.attr('style', 'display: inline-block');\n", "\n", " $(parent_element).append(this.root);\n", "\n", " this._init_header(this);\n", " this._init_canvas(this);\n", " this._init_toolbar(this);\n", "\n", " var fig = this;\n", "\n", " this.waiting = false;\n", "\n", " this.ws.onopen = function () {\n", " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", " fig.send_message(\"send_image_mode\", {});\n", " fig.send_message(\"refresh\", {});\n", " }\n", "\n", " this.imageObj.onload = function() {\n", " if (fig.image_mode == 'full') {\n", " // Full images could contain transparency (where diff images\n", " // almost always do), so we need to clear the canvas so that\n", " // there is no ghosting.\n", " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", " }\n", " fig.context.drawImage(fig.imageObj, 0, 0);\n", " };\n", "\n", " this.imageObj.onunload = function() {\n", " this.ws.close();\n", " }\n", "\n", " this.ws.onmessage = this._make_on_message_function(this);\n", "\n", " this.ondownload = ondownload;\n", "}\n", "\n", "mpl.figure.prototype._init_header = function() {\n", " var titlebar = $(\n", " '
');\n", " var titletext = $(\n", " '
');\n", " titlebar.append(titletext)\n", " this.root.append(titlebar);\n", " this.header = titletext[0];\n", "}\n", "\n", "\n", "\n", "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "\n", "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", "\n", "}\n", "\n", "mpl.figure.prototype._init_canvas = function() {\n", " var fig = this;\n", "\n", " var canvas_div = $('
');\n", "\n", " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", "\n", " function canvas_keyboard_event(event) {\n", " return fig.key_event(event, event['data']);\n", " }\n", "\n", " canvas_div.keydown('key_press', canvas_keyboard_event);\n", " canvas_div.keyup('key_release', canvas_keyboard_event);\n", " this.canvas_div = canvas_div\n", " this._canvas_extra_style(canvas_div)\n", " this.root.append(canvas_div);\n", "\n", " var canvas = $('');\n", " canvas.addClass('mpl-canvas');\n", " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", "\n", " this.canvas = canvas[0];\n", " this.context = canvas[0].getContext(\"2d\");\n", "\n", " var rubberband = $('');\n", " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", "\n", " var pass_mouse_events = true;\n", "\n", " canvas_div.resizable({\n", " start: function(event, ui) {\n", " pass_mouse_events = false;\n", " },\n", " resize: function(event, ui) {\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " stop: function(event, ui) {\n", " pass_mouse_events = true;\n", " fig.request_resize(ui.size.width, ui.size.height);\n", " },\n", " });\n", "\n", " function mouse_event_fn(event) {\n", " if (pass_mouse_events)\n", " return fig.mouse_event(event, event['data']);\n", " }\n", "\n", " rubberband.mousedown('button_press', mouse_event_fn);\n", " rubberband.mouseup('button_release', mouse_event_fn);\n", " // Throttle sequential mouse events to 1 every 20ms.\n", " rubberband.mousemove('motion_notify', mouse_event_fn);\n", "\n", " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", "\n", " canvas_div.on(\"wheel\", function (event) {\n", " event = event.originalEvent;\n", " event['data'] = 'scroll'\n", " if (event.deltaY < 0) {\n", " event.step = 1;\n", " } else {\n", " event.step = -1;\n", " }\n", " mouse_event_fn(event);\n", " });\n", "\n", " canvas_div.append(canvas);\n", " canvas_div.append(rubberband);\n", "\n", " this.rubberband = rubberband;\n", " this.rubberband_canvas = rubberband[0];\n", " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", " this.rubberband_context.strokeStyle = \"#000000\";\n", "\n", " this._resize_canvas = function(width, height) {\n", " // Keep the size of the canvas, canvas container, and rubber band\n", " // canvas in synch.\n", " canvas_div.css('width', width)\n", " canvas_div.css('height', height)\n", "\n", " canvas.attr('width', width);\n", " canvas.attr('height', height);\n", "\n", " rubberband.attr('width', width);\n", " rubberband.attr('height', height);\n", " }\n", "\n", " // Set the figure to an initial 600x600px, this will subsequently be updated\n", " // upon first draw.\n", " this._resize_canvas(600, 600);\n", "\n", " // Disable right mouse context menu.\n", " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", " return false;\n", " });\n", "\n", " function set_focus () {\n", " canvas.focus();\n", " canvas_div.focus();\n", " }\n", "\n", " window.setTimeout(set_focus, 100);\n", "}\n", "\n", "mpl.figure.prototype._init_toolbar = function() {\n", " var fig = this;\n", "\n", " var nav_element = $('
')\n", " nav_element.attr('style', 'width: 100%');\n", " this.root.append(nav_element);\n", "\n", " // Define a callback function for later on.\n", " function toolbar_event(event) {\n", " return fig.toolbar_button_onclick(event['data']);\n", " }\n", " function toolbar_mouse_event(event) {\n", " return fig.toolbar_button_onmouseover(event['data']);\n", " }\n", "\n", " for(var toolbar_ind in mpl.toolbar_items) {\n", " var name = mpl.toolbar_items[toolbar_ind][0];\n", " var tooltip = mpl.toolbar_items[toolbar_ind][1];\n", " var image = mpl.toolbar_items[toolbar_ind][2];\n", " var method_name = mpl.toolbar_items[toolbar_ind][3];\n", "\n", " if (!name) {\n", " // put a spacer in here.\n", " continue;\n", " }\n", " var button = $('