{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Using multiple blocks\n",
    "\n",
    "Here we are going to use 2 different blocks in our animation.\n",
    "\n",
    "First we need some imports:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib notebook\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import animatplot as amp"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We are going to plot a pcolormesh and a line on 2 different axes.\n",
    "\n",
    "Let's use: $z = \\sin(x^2+y^2-t)$ for the pcolormesh, and a cross-section of $y=0$: $z = \\sin(x^2-t)$ for the line.\n",
    "\n",
    "First, we generate the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "x = np.linspace(-2, 2, 41)\n",
    "y = np.linspace(-2, 2, 41)\n",
    "t = np.linspace(0, 2*np.pi, 30)\n",
    "\n",
    "X, Y, T = np.meshgrid(x, y, t)\n",
    "\n",
    "pcolormesh_data = np.sin(X*X+Y*Y-T)\n",
    "line_data       = pcolormesh_data[20,:,:] # the slice where y=0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We need to be careful here. Our time axis is the last axis of our data, but animatplot assumes it is the first axis by default. Fortunately, we can use the ```t_axis``` argument.\n",
    "\n",
    "We use the ```axis``` argument to attached the data to a specific subplot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "application/javascript": [
       "/* Put everything inside the global mpl namespace */\n",
       "window.mpl = {};\n",
       "\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 = $('<div/>');\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",
       "            if (mpl.ratio != 1) {\n",
       "                fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n",
       "            }\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",
       "        fig.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",
       "        '<div class=\"ui-dialog-titlebar ui-widget-header ui-corner-all ' +\n",
       "        'ui-helper-clearfix\"/>');\n",
       "    var titletext = $(\n",
       "        '<div class=\"ui-dialog-title\" style=\"width: 100%; ' +\n",
       "        'text-align: center; padding: 3px;\"/>');\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 = $('<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 = $('<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 backingStore = this.context.backingStorePixelRatio ||\n",
       "\tthis.context.webkitBackingStorePixelRatio ||\n",
       "\tthis.context.mozBackingStorePixelRatio ||\n",
       "\tthis.context.msBackingStorePixelRatio ||\n",
       "\tthis.context.oBackingStorePixelRatio ||\n",
       "\tthis.context.backingStorePixelRatio || 1;\n",
       "\n",
       "    mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n",
       "\n",
       "    var rubberband = $('<canvas/>');\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 * mpl.ratio);\n",
       "        canvas.attr('height', height * mpl.ratio);\n",
       "        canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\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 = $('<div/>')\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 = $('<button/>');\n",
       "        button.addClass('ui-button ui-widget ui-state-default ui-corner-all ' +\n",
       "                        'ui-button-icon-only');\n",
       "        button.attr('role', 'button');\n",
       "        button.attr('aria-disabled', 'false');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "\n",
       "        var icon_img = $('<span/>');\n",
       "        icon_img.addClass('ui-button-icon-primary ui-icon');\n",
       "        icon_img.addClass(image);\n",
       "        icon_img.addClass('ui-corner-all');\n",
       "\n",
       "        var tooltip_span = $('<span/>');\n",
       "        tooltip_span.addClass('ui-button-text');\n",
       "        tooltip_span.html(tooltip);\n",
       "\n",
       "        button.append(icon_img);\n",
       "        button.append(tooltip_span);\n",
       "\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    var fmt_picker_span = $('<span/>');\n",
       "\n",
       "    var fmt_picker = $('<select/>');\n",
       "    fmt_picker.addClass('mpl-toolbar-option ui-widget ui-widget-content');\n",
       "    fmt_picker_span.append(fmt_picker);\n",
       "    nav_element.append(fmt_picker_span);\n",
       "    this.format_dropdown = fmt_picker[0];\n",
       "\n",
       "    for (var ind in mpl.extensions) {\n",
       "        var fmt = mpl.extensions[ind];\n",
       "        var option = $(\n",
       "            '<option/>', {selected: fmt === mpl.default_extension}).html(fmt);\n",
       "        fmt_picker.append(option)\n",
       "    }\n",
       "\n",
       "    // Add hover states to the ui-buttons\n",
       "    $( \".ui-button\" ).hover(\n",
       "        function() { $(this).addClass(\"ui-state-hover\");},\n",
       "        function() { $(this).removeClass(\"ui-state-hover\");}\n",
       "    );\n",
       "\n",
       "    var status_bar = $('<span class=\"mpl-message\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.request_resize = function(x_pixels, y_pixels) {\n",
       "    // Request matplotlib to resize the figure. Matplotlib will then trigger a resize in the client,\n",
       "    // which will in turn request a refresh of the image.\n",
       "    this.send_message('resize', {'width': x_pixels, 'height': y_pixels});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_message = function(type, properties) {\n",
       "    properties['type'] = type;\n",
       "    properties['figure_id'] = this.id;\n",
       "    this.ws.send(JSON.stringify(properties));\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.send_draw_message = function() {\n",
       "    if (!this.waiting) {\n",
       "        this.waiting = true;\n",
       "        this.ws.send(JSON.stringify({type: \"draw\", figure_id: this.id}));\n",
       "    }\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    var format_dropdown = fig.format_dropdown;\n",
       "    var format = format_dropdown.options[format_dropdown.selectedIndex].value;\n",
       "    fig.ondownload(fig, format);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.figure.prototype.handle_resize = function(fig, msg) {\n",
       "    var size = msg['size'];\n",
       "    if (size[0] != fig.canvas.width || size[1] != fig.canvas.height) {\n",
       "        fig._resize_canvas(size[0], size[1]);\n",
       "        fig.send_message(\"refresh\", {});\n",
       "    };\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_rubberband = function(fig, msg) {\n",
       "    var x0 = msg['x0'] / mpl.ratio;\n",
       "    var y0 = (fig.canvas.height - msg['y0']) / mpl.ratio;\n",
       "    var x1 = msg['x1'] / mpl.ratio;\n",
       "    var y1 = (fig.canvas.height - msg['y1']) / mpl.ratio;\n",
       "    x0 = Math.floor(x0) + 0.5;\n",
       "    y0 = Math.floor(y0) + 0.5;\n",
       "    x1 = Math.floor(x1) + 0.5;\n",
       "    y1 = Math.floor(y1) + 0.5;\n",
       "    var min_x = Math.min(x0, x1);\n",
       "    var min_y = Math.min(y0, y1);\n",
       "    var width = Math.abs(x1 - x0);\n",
       "    var height = Math.abs(y1 - y0);\n",
       "\n",
       "    fig.rubberband_context.clearRect(\n",
       "        0, 0, fig.canvas.width, fig.canvas.height);\n",
       "\n",
       "    fig.rubberband_context.strokeRect(min_x, min_y, width, height);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_figure_label = function(fig, msg) {\n",
       "    // Updates the figure title.\n",
       "    fig.header.textContent = msg['label'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_cursor = function(fig, msg) {\n",
       "    var cursor = msg['cursor'];\n",
       "    switch(cursor)\n",
       "    {\n",
       "    case 0:\n",
       "        cursor = 'pointer';\n",
       "        break;\n",
       "    case 1:\n",
       "        cursor = 'default';\n",
       "        break;\n",
       "    case 2:\n",
       "        cursor = 'crosshair';\n",
       "        break;\n",
       "    case 3:\n",
       "        cursor = 'move';\n",
       "        break;\n",
       "    }\n",
       "    fig.rubberband_canvas.style.cursor = cursor;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_message = function(fig, msg) {\n",
       "    fig.message.textContent = msg['message'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_draw = function(fig, msg) {\n",
       "    // Request the server to send over a new figure.\n",
       "    fig.send_draw_message();\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_image_mode = function(fig, msg) {\n",
       "    fig.image_mode = msg['mode'];\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Called whenever the canvas gets updated.\n",
       "    this.send_message(\"ack\", {});\n",
       "}\n",
       "\n",
       "// A function to construct a web socket function for onmessage handling.\n",
       "// Called in the figure constructor.\n",
       "mpl.figure.prototype._make_on_message_function = function(fig) {\n",
       "    return function socket_on_message(evt) {\n",
       "        if (evt.data instanceof Blob) {\n",
       "            /* FIXME: We get \"Resource interpreted as Image but\n",
       "             * transferred with MIME type text/plain:\" errors on\n",
       "             * Chrome.  But how to set the MIME type?  It doesn't seem\n",
       "             * to be part of the websocket stream */\n",
       "            evt.data.type = \"image/png\";\n",
       "\n",
       "            /* Free the memory for the previous frames */\n",
       "            if (fig.imageObj.src) {\n",
       "                (window.URL || window.webkitURL).revokeObjectURL(\n",
       "                    fig.imageObj.src);\n",
       "            }\n",
       "\n",
       "            fig.imageObj.src = (window.URL || window.webkitURL).createObjectURL(\n",
       "                evt.data);\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "        else if (typeof evt.data === 'string' && evt.data.slice(0, 21) == \"data:image/png;base64\") {\n",
       "            fig.imageObj.src = evt.data;\n",
       "            fig.updated_canvas_event();\n",
       "            fig.waiting = false;\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        var msg = JSON.parse(evt.data);\n",
       "        var msg_type = msg['type'];\n",
       "\n",
       "        // Call the  \"handle_{type}\" callback, which takes\n",
       "        // the figure and JSON message as its only arguments.\n",
       "        try {\n",
       "            var callback = fig[\"handle_\" + msg_type];\n",
       "        } catch (e) {\n",
       "            console.log(\"No handler for the '\" + msg_type + \"' message type: \", msg);\n",
       "            return;\n",
       "        }\n",
       "\n",
       "        if (callback) {\n",
       "            try {\n",
       "                // console.log(\"Handling '\" + msg_type + \"' message: \", msg);\n",
       "                callback(fig, msg);\n",
       "            } catch (e) {\n",
       "                console.log(\"Exception inside the 'handler_\" + msg_type + \"' callback:\", e, e.stack, msg);\n",
       "            }\n",
       "        }\n",
       "    };\n",
       "}\n",
       "\n",
       "// from http://stackoverflow.com/questions/1114465/getting-mouse-location-in-canvas\n",
       "mpl.findpos = function(e) {\n",
       "    //this section is from http://www.quirksmode.org/js/events_properties.html\n",
       "    var targ;\n",
       "    if (!e)\n",
       "        e = window.event;\n",
       "    if (e.target)\n",
       "        targ = e.target;\n",
       "    else if (e.srcElement)\n",
       "        targ = e.srcElement;\n",
       "    if (targ.nodeType == 3) // defeat Safari bug\n",
       "        targ = targ.parentNode;\n",
       "\n",
       "    // jQuery normalizes the pageX and pageY\n",
       "    // pageX,Y are the mouse positions relative to the document\n",
       "    // offset() returns the position of the element relative to the document\n",
       "    var x = e.pageX - $(targ).offset().left;\n",
       "    var y = e.pageY - $(targ).offset().top;\n",
       "\n",
       "    return {\"x\": x, \"y\": y};\n",
       "};\n",
       "\n",
       "/*\n",
       " * return a copy of an object with only non-object keys\n",
       " * we need this to avoid circular references\n",
       " * http://stackoverflow.com/a/24161582/3208463\n",
       " */\n",
       "function simpleKeys (original) {\n",
       "  return Object.keys(original).reduce(function (obj, key) {\n",
       "    if (typeof original[key] !== 'object')\n",
       "        obj[key] = original[key]\n",
       "    return obj;\n",
       "  }, {});\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.mouse_event = function(event, name) {\n",
       "    var canvas_pos = mpl.findpos(event)\n",
       "\n",
       "    if (name === 'button_press')\n",
       "    {\n",
       "        this.canvas.focus();\n",
       "        this.canvas_div.focus();\n",
       "    }\n",
       "\n",
       "    var x = canvas_pos.x * mpl.ratio;\n",
       "    var y = canvas_pos.y * mpl.ratio;\n",
       "\n",
       "    this.send_message(name, {x: x, y: y, button: event.button,\n",
       "                             step: event.step,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "\n",
       "    /* This prevents the web browser from automatically changing to\n",
       "     * the text insertion cursor when the button is pressed.  We want\n",
       "     * to control all of the cursor setting manually through the\n",
       "     * 'cursor' event from matplotlib */\n",
       "    event.preventDefault();\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    // Handle any extra behaviour associated with a key event\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.key_event = function(event, name) {\n",
       "\n",
       "    // Prevent repeat events\n",
       "    if (name == 'key_press')\n",
       "    {\n",
       "        if (event.which === this._key)\n",
       "            return;\n",
       "        else\n",
       "            this._key = event.which;\n",
       "    }\n",
       "    if (name == 'key_release')\n",
       "        this._key = null;\n",
       "\n",
       "    var value = '';\n",
       "    if (event.ctrlKey && event.which != 17)\n",
       "        value += \"ctrl+\";\n",
       "    if (event.altKey && event.which != 18)\n",
       "        value += \"alt+\";\n",
       "    if (event.shiftKey && event.which != 16)\n",
       "        value += \"shift+\";\n",
       "\n",
       "    value += 'k';\n",
       "    value += event.which.toString();\n",
       "\n",
       "    this._key_event_extra(event, name);\n",
       "\n",
       "    this.send_message(name, {key: value,\n",
       "                             guiEvent: simpleKeys(event)});\n",
       "    return false;\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onclick = function(name) {\n",
       "    if (name == 'download') {\n",
       "        this.handle_save(this, null);\n",
       "    } else {\n",
       "        this.send_message(\"toolbar_button\", {name: name});\n",
       "    }\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.toolbar_button_onmouseover = function(tooltip) {\n",
       "    this.message.textContent = tooltip;\n",
       "};\n",
       "mpl.toolbar_items = [[\"Home\", \"Reset original view\", \"fa fa-home icon-home\", \"home\"], [\"Back\", \"Back to  previous view\", \"fa fa-arrow-left icon-arrow-left\", \"back\"], [\"Forward\", \"Forward to next view\", \"fa fa-arrow-right icon-arrow-right\", \"forward\"], [\"\", \"\", \"\", \"\"], [\"Pan\", \"Pan axes with left mouse, zoom with right\", \"fa fa-arrows icon-move\", \"pan\"], [\"Zoom\", \"Zoom to rectangle\", \"fa fa-square-o icon-check-empty\", \"zoom\"], [\"\", \"\", \"\", \"\"], [\"Download\", \"Download plot\", \"fa fa-floppy-o icon-save\", \"download\"]];\n",
       "\n",
       "mpl.extensions = [\"eps\", \"jpeg\", \"pdf\", \"png\", \"ps\", \"raw\", \"svg\", \"tif\"];\n",
       "\n",
       "mpl.default_extension = \"png\";var comm_websocket_adapter = function(comm) {\n",
       "    // Create a \"websocket\"-like object which calls the given IPython comm\n",
       "    // object with the appropriate methods. Currently this is a non binary\n",
       "    // socket, so there is still some room for performance tuning.\n",
       "    var ws = {};\n",
       "\n",
       "    ws.close = function() {\n",
       "        comm.close()\n",
       "    };\n",
       "    ws.send = function(m) {\n",
       "        //console.log('sending', m);\n",
       "        comm.send(m);\n",
       "    };\n",
       "    // Register the callback with on_msg.\n",
       "    comm.on_msg(function(msg) {\n",
       "        //console.log('receiving', msg['content']['data'], msg);\n",
       "        // Pass the mpl event to the overridden (by mpl) onmessage function.\n",
       "        ws.onmessage(msg['content']['data'])\n",
       "    });\n",
       "    return ws;\n",
       "}\n",
       "\n",
       "mpl.mpl_figure_comm = function(comm, msg) {\n",
       "    // This is the function which gets called when the mpl process\n",
       "    // starts-up an IPython Comm through the \"matplotlib\" channel.\n",
       "\n",
       "    var id = msg.content.data.id;\n",
       "    // Get hold of the div created by the display call when the Comm\n",
       "    // socket was opened in Python.\n",
       "    var element = $(\"#\" + id);\n",
       "    var ws_proxy = comm_websocket_adapter(comm)\n",
       "\n",
       "    function ondownload(figure, format) {\n",
       "        window.open(figure.imageObj.src);\n",
       "    }\n",
       "\n",
       "    var fig = new mpl.figure(id, ws_proxy,\n",
       "                           ondownload,\n",
       "                           element.get(0));\n",
       "\n",
       "    // Call onopen now - mpl needs it, as it is assuming we've passed it a real\n",
       "    // web socket which is closed, not our websocket->open comm proxy.\n",
       "    ws_proxy.onopen();\n",
       "\n",
       "    fig.parent_element = element.get(0);\n",
       "    fig.cell_info = mpl.find_output_cell(\"<div id='\" + id + \"'></div>\");\n",
       "    if (!fig.cell_info) {\n",
       "        console.error(\"Failed to find cell for figure\", id, fig);\n",
       "        return;\n",
       "    }\n",
       "\n",
       "    var output_index = fig.cell_info[2]\n",
       "    var cell = fig.cell_info[0];\n",
       "\n",
       "};\n",
       "\n",
       "mpl.figure.prototype.handle_close = function(fig, msg) {\n",
       "    var width = fig.canvas.width/mpl.ratio\n",
       "    fig.root.unbind('remove')\n",
       "\n",
       "    // Update the output cell to use the data from the current canvas.\n",
       "    fig.push_to_output();\n",
       "    var dataURL = fig.canvas.toDataURL();\n",
       "    // Re-enable the keyboard manager in IPython - without this line, in FF,\n",
       "    // the notebook keyboard shortcuts fail.\n",
       "    IPython.keyboard_manager.enable()\n",
       "    $(fig.parent_element).html('<img src=\"' + dataURL + '\" width=\"' + width + '\">');\n",
       "    fig.close_ws(fig, msg);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.close_ws = function(fig, msg){\n",
       "    fig.send_message('closing', msg);\n",
       "    // fig.ws.close()\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.push_to_output = function(remove_interactive) {\n",
       "    // Turn the data on the canvas into data in the output cell.\n",
       "    var width = this.canvas.width/mpl.ratio\n",
       "    var dataURL = this.canvas.toDataURL();\n",
       "    this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\" width=\"' + width + '\">';\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.updated_canvas_event = function() {\n",
       "    // Tell IPython that the notebook contents must change.\n",
       "    IPython.notebook.set_dirty(true);\n",
       "    this.send_message(\"ack\", {});\n",
       "    var fig = this;\n",
       "    // Wait a second, then push the new image to the DOM so\n",
       "    // that it is saved nicely (might be nice to debounce this).\n",
       "    setTimeout(function () { fig.push_to_output() }, 1000);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._init_toolbar = function() {\n",
       "    var fig = this;\n",
       "\n",
       "    var nav_element = $('<div/>')\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) { continue; };\n",
       "\n",
       "        var button = $('<button class=\"btn btn-default\" href=\"#\" title=\"' + name + '\"><i class=\"fa ' + image + ' fa-lg\"></i></button>');\n",
       "        button.click(method_name, toolbar_event);\n",
       "        button.mouseover(tooltip, toolbar_mouse_event);\n",
       "        nav_element.append(button);\n",
       "    }\n",
       "\n",
       "    // Add the status bar.\n",
       "    var status_bar = $('<span class=\"mpl-message\" style=\"text-align:right; float: right;\"/>');\n",
       "    nav_element.append(status_bar);\n",
       "    this.message = status_bar[0];\n",
       "\n",
       "    // Add the close button to the window.\n",
       "    var buttongrp = $('<div class=\"btn-group inline pull-right\"></div>');\n",
       "    var button = $('<button class=\"btn btn-mini btn-primary\" href=\"#\" title=\"Stop Interaction\"><i class=\"fa fa-power-off icon-remove icon-large\"></i></button>');\n",
       "    button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
       "    button.mouseover('Stop Interaction', toolbar_mouse_event);\n",
       "    buttongrp.append(button);\n",
       "    var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
       "    titlebar.prepend(buttongrp);\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._root_extra_style = function(el){\n",
       "    var fig = this\n",
       "    el.on(\"remove\", function(){\n",
       "\tfig.close_ws(fig, {});\n",
       "    });\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._canvas_extra_style = function(el){\n",
       "    // this is important to make the div 'focusable\n",
       "    el.attr('tabindex', 0)\n",
       "    // reach out to IPython and tell the keyboard manager to turn it's self\n",
       "    // off when our div gets focus\n",
       "\n",
       "    // location in version 3\n",
       "    if (IPython.notebook.keyboard_manager) {\n",
       "        IPython.notebook.keyboard_manager.register_events(el);\n",
       "    }\n",
       "    else {\n",
       "        // location in version 2\n",
       "        IPython.keyboard_manager.register_events(el);\n",
       "    }\n",
       "\n",
       "}\n",
       "\n",
       "mpl.figure.prototype._key_event_extra = function(event, name) {\n",
       "    var manager = IPython.notebook.keyboard_manager;\n",
       "    if (!manager)\n",
       "        manager = IPython.keyboard_manager;\n",
       "\n",
       "    // Check for shift+enter\n",
       "    if (event.shiftKey && event.which == 13) {\n",
       "        this.canvas_div.blur();\n",
       "        event.shiftKey = false;\n",
       "        // Send a \"J\" for go to next cell\n",
       "        event.which = 74;\n",
       "        event.keyCode = 74;\n",
       "        manager.command_mode();\n",
       "        manager.handle_keydown(event);\n",
       "    }\n",
       "}\n",
       "\n",
       "mpl.figure.prototype.handle_save = function(fig, msg) {\n",
       "    fig.ondownload(fig, null);\n",
       "}\n",
       "\n",
       "\n",
       "mpl.find_output_cell = function(html_output) {\n",
       "    // Return the cell and output element which can be found *uniquely* in the notebook.\n",
       "    // Note - this is a bit hacky, but it is done because the \"notebook_saving.Notebook\"\n",
       "    // IPython event is triggered only after the cells have been serialised, which for\n",
       "    // our purposes (turning an active figure into a static one), is too late.\n",
       "    var cells = IPython.notebook.get_cells();\n",
       "    var ncells = cells.length;\n",
       "    for (var i=0; i<ncells; i++) {\n",
       "        var cell = cells[i];\n",
       "        if (cell.cell_type === 'code'){\n",
       "            for (var j=0; j<cell.output_area.outputs.length; j++) {\n",
       "                var data = cell.output_area.outputs[j];\n",
       "                if (data.data) {\n",
       "                    // IPython >= 3 moved mimebundle to data attribute of output\n",
       "                    data = data.data;\n",
       "                }\n",
       "                if (data['text/html'] == html_output) {\n",
       "                    return [cell, data, j];\n",
       "                }\n",
       "            }\n",
       "        }\n",
       "    }\n",
       "}\n",
       "\n",
       "// Register the function which deals with the matplotlib target/channel.\n",
       "// The kernel may be null if the page has been refreshed.\n",
       "if (IPython.notebook.kernel != null) {\n",
       "    IPython.notebook.kernel.comm_manager.register_target('matplotlib', mpl.mpl_figure_comm);\n",
       "}\n"
      ],
      "text/plain": [
       "<IPython.core.display.Javascript object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<img src=\"data:image/png;base64,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\" width=\"640\">"
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# standard matplotlib stuff\n",
    "# create the different plotting axes\n",
    "fig, (ax1, ax2) = plt.subplots(1, 2)\n",
    "\n",
    "for ax in [ax1, ax2]:\n",
    "    ax.set_aspect('equal')\n",
    "    ax.set_xlabel('x')\n",
    "\n",
    "ax2.set_ylabel('y', labelpad=-5)\n",
    "ax1.set_ylabel('z')\n",
    "ax1.set_ylim([-1.1,1.1])\n",
    "\n",
    "fig.suptitle('Multiple blocks')\n",
    "ax1.set_title('Cross Section: $y=0$')\n",
    "ax2.set_title(r'$z=\\sin(x^2+y^2-t)$')\n",
    "\n",
    "# animatplot stuff\n",
    "# now we make our blocks\n",
    "line_block       = amp.blocks.Line(X[0,:,:], line_data,\n",
    "                                   axis=ax1, t_axis=1)\n",
    "pcolormesh_block = amp.blocks.Pcolormesh(X[:,:,0], Y[:,:,0], pcolormesh_data,\n",
    "                                         axis=ax2, t_axis=2, vmin=-1, vmax=1)\n",
    "plt.colorbar(pcolormesh_block.quad)\n",
    "timeline = amp.Timeline(t, fps=10)\n",
    "\n",
    "# now to contruct the animation\n",
    "anim = amp.Animation([pcolormesh_block, line_block], timeline)\n",
    "anim.controls()\n",
    "\n",
    "anim.save_gif('images/multiblock')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "There is a lot going on here so lets break it down.\n",
    "\n",
    "Firstly, the ```standard matplotlib stuff``` is creating, and labeling all of our axes for our subplot. This is exactly how one might do a static, non-animated plot.\n",
    "\n",
    "When we make the Line block, we pass in the data for our lines as 2D arrays (```X[0,:,:]``` and ```line_data```). We attached that line to the first axis ```axis=ax1```. We also specifify that the time axis is the last axis of the data ```t_axis=1```.\n",
    "\n",
    "When we make the Pcolormesh block, we pass in the x, y data as 2D arrays (```X[:,:,0]``` and ```Y[:,:,0]```), and the z data as a 3D array. We attached the pcolormesh to the second axis ```axis=ax2```. We also specifify that the time axis is the last axis of the data ```t_axis=2```.\n",
    "\n",
    "Additional, we told the Pcolormesh blocks what the minimum and maximum values will be (```vmin=-1``` and ```vmax=1```), so that the colorscale will be proper. The keywords ```vmin```, and ```vmax``` get passed to the underlaying called to matplotlib's pcolormesh.\n",
    "\n",
    "```plt.colorbar``` does not recognize the Pcolormesh block as a mappable, so we pass in a mappable from the block to get the colorbar to work. In the future, animatplot may have a wrapper around this.\n",
    "\n",
    "The rest simply brings all of the blocks, and the timeline together into an animation."
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {
    "raw_mimetype": "text/restructuredtext"
   },
   "source": [
    ".. image:: images/multiblock.gif"
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Raw Cell Format",
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
