Skip to content

Instantly share code, notes, and snippets.

@elsonidoq
Last active August 29, 2015 14:24
Show Gist options
  • Save elsonidoq/154aa14eb5921fb8a91a to your computer and use it in GitHub Desktop.
Save elsonidoq/154aa14eb5921fb8a91a to your computer and use it in GitHub Desktop.
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Aumentos inflacionarios"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dado que decidimos alquilar, me puse a hacer cuentas de qué quería decir un aumento de un 15% semestral. Cual sería la tasa anual \"equivalente\"?.\n",
"\n",
"Al principio hacía encajar esto dentro del esquema de interés compuesto, pero no aplica, porque **no tenemos un capital que va creciendo periódicamente con una tasa de interés**, sino que hacemos sucesivos pagos que se van haciendo cada vez mas caros con una tasa que crece exponencialmente.\n",
"\n",
"Por lo tanto lo que queremos calcular es el pago total: la suma de lo que pagamos mes a mes.\n",
"\n",
"Si nos interesara saber cual es el valor del alquiler al final de un período, la fórmula del interés compuesto sirve, pero si nos interesa saber cuanta plata pagamos al final del día, no. Hay que hacer una suma geométrica (ver apéndice 1).\n",
"\n",
"Con la cuenta del interés compuesto, una tasa semestral del 15% equivale a una anual del 32.25%. Vamos a comparar el pago total en ambos casos."
]
},
{
"cell_type": "code",
"execution_count": 75,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"# incremento del 15% semestral\n",
"tasa_semestral = 1.15 \n",
"\n",
"# incremento del 32.25% anual\n",
"tasa_anual = 1.3225"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculamos los pagos mes a mes y aplico los aumentos que corresponden, semestrales o anuales según el caso"
]
},
{
"cell_type": "code",
"execution_count": 76,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"pagos_semestral = calcular_pagos(tasa_semestral, semestral=True)\n",
"pagos_anual = calcular_pagos(tasa_anual, semestral=False)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Así es como se ven los pagos en el tiempo"
]
},
{
"cell_type": "code",
"execution_count": 98,
"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 = $('<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",
" 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",
" fig.waiting = false;\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",
" '<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 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);\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 = $('<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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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",
" 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",
" 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",
"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;\n",
" var y = canvas_pos.y;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step});\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",
" 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 overriden (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",
" // 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 + '\">');\n",
" fig.send_message('closing', {});\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAG4CAYAAADVDFZ+AAAgAElEQVR4XuydB3gc1dX+31lVq1rVklVtSbtywzbuBQwYMGASAiGBf/hCT4CPFmqABD5Ciek9QCCQhBYIgYRebWNj425csXck22pWl9X7auf/3LFWkeSVts2dnXLmeXjiWDP3nvN7z716fadcAXQQASJABIgAESACRIAImIqAYKpsKVkiQASIABEgAkSACBABkAGkIiACRIAIEAEiQASIgMkIkAE0meCULhEgAkSACBABIkAEyABSDRABIkAEiAARIAJEwGQEyACaTHBKlwgQASJABIgAESACZACpBogAESACRIAIEAEiYDICZABNJjilSwSIABEgAkSACBABMoBUA0SACBABIkAEiAARMBkBMoAmE5zSJQJEgAgQASJABIgAGUCqASJABIgAESACRIAImIwAGUCTCU7pEgEiQASIABEgAkSADCDVABEgAkSACBABIkAETEaADKDJBKd0iQARIAJEgAgQASJABpBqgAgQASJABIgAESACJiNABtBkglO6RIAIEAEiQASIABEgA0g1QASIABEgAkSACBABkxEgA2gywSldIkAEiAARIAJEgAiQAaQaIAJEgAgQASJABIiAyQiQATSZ4JQuESACRIAIEAEiQATIAFINEAEiQASIABEgAkTAZATIAJpMcEqXCBABIkAEiAARIAJkAKkGiAARIAJEgAgQASJgMgJkAE0mOKVLBIgAESACRIAIEAEygFQDRIAIEAEiQASIABEwGQEygCYTnNIlAkSACBABIkAEiAAZQKoBIkAEiAARIAJEgAiYjAAZQJMJTukSASJABIgAESACRIAMINUAESACXhGwWq1/AxAiiuIvvbrAi5OsVuseAA+Lovh6YWFhrtPpPAggXxRF9r90cCJgtVpLBEG43263v8KpC2qWCBABjRMgA6hxgSg8IqAmgYKCgssEQWCmgJmyOwf3bbVa/9pvAC/mERMZQB5U3bdptVoP9RvAV9XrlXoiAkRASwTIAGpJDYqFCASZgNVq3QKAzQtZYWFhWXv37u1xhcRjBXBwugoYQEt/7H1Bxqj57skAal4iCpAIcCdABpA7YuqACOiDgNVqnQNgoyAIkyVJ2iAIwvV2u/3NkQxgfn5+nsVieQnAbACHATwJ4M8OhyP34MGDZVar9V4A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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grafico_alquileres(pagos_semestral, pagos_anual, tasa_semestral, tasa_anual)\n",
"_ = title('Alquileres mensuales')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Si vemos cuanta plata pagamos en total a lo largo del tiempo.\n",
"\n",
"Es evidente que la linea azul esta por ensima de la verde en dos secciones. Eso quiere decir lisa y llanamente que pagamos más.\n",
"\n",
"Abajo está el gráfico del acumulado, donde se va a ver lo mismo (y se empieza a ver que la azul se aleja cada vez más rapido de la verde)"
]
},
{
"cell_type": "code",
"execution_count": 100,
"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 = $('<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",
" 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",
" fig.waiting = false;\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",
" '<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 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);\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 = $('<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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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",
" 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",
" 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",
"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;\n",
" var y = canvas_pos.y;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step});\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",
" 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 overriden (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",
" // 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 + '\">');\n",
" fig.send_message('closing', {});\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grafico_alquileres(np.cumsum(pagos_semestral), np.cumsum(pagos_anual), tasa_semestral, tasa_anual)\n",
"_ = title('Acumulado de pagos pagado')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Vayamos a los trapos y comparemos cuanta plata estaríamos pagando de mas"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Con un aumento de 15% semestral pagas 29.96 alquileres\n",
"Con un aumento de 32.25% anual pagas 27.87 alquileres\n",
"Diferencia de alquileres: 2.09\n"
]
}
],
"source": [
"comparar_pagos(tasa_semestral, pagos_semestral, tasa_anual, pagos_anual)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Es decir, si tu alquiler es de \\$5.000 y si te hacen un aumento del 15% semestral, vas a terminar pagando **$10.450 más** que si te hacen un 30% anual!\n",
"\n",
"Como para redondear, la tasa que equivaldría en estos términos a un 15% semestral es el de un **50% anual**!!!\n",
"Veamos los graficos"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 15% semestral equivale a 50% anual"
]
},
{
"cell_type": "code",
"execution_count": 102,
"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 = $('<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",
" 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",
" fig.waiting = false;\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",
" '<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 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);\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 = $('<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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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",
" 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",
" 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",
"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;\n",
" var y = canvas_pos.y;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step});\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",
" 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 overriden (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",
" // 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 + '\">');\n",
" fig.send_message('closing', {});\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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,iVBORw0KGgoAAAANSUhEUgAAAoAAAAG4CAYAAADVDFZ+AAAgAElEQVR4XuydB3gc1dX+31n1bnXJkiXZknblio3BBYMNGNNMQsiXwh++0BMg9BogwEcosamBUAOBJLSQAqFXF9xw7zb2jmRZktWLZfW2u/N/7liryLKknS13dsqZ58kT7J2995zfe+7d13fKFUAHESACRIAIEAEiQASIgKkICKbKlpIlAkSACBABIkAEiAARABlAKgIiQASIABEgAkSACJiMABlAkwlO6RIBIkAEiAARIAJEgAwg1QARIAJEgAgQASJABExGgAygyQSndIkAESACRIAIEAEiQAaQaoAIEAEiQASIABEgAiYjQAbQZIJTukSACBABIkAEiAARIANINUAEiAARIAJEgAgQAZMRIANoMsEpXSJABIgAESACRIAIkAGkGiACRIAIEAEiQASIgMkIkAE0meCULhEgAkSACBABIkAEyABSDRABIkAEiAARIAJEwGQEyACaTHBKlwgQASJABIgAESACZACpBogAESACRIAIEAEiYDICZABNJjilSwSIABEgAkSACBABMoBUA0SACBABIkAEiAARMBkBMoAmE5zSJQJEgAgQASJABIgAGUCqASJABIgAESACRIAImIwAGUCTCU7pEgEiQASIABEgAkSADCDVABEgAkSACBABIkAETEaADKDJBKd0iQARIAJEgAgQASJABpBqgAgQASJABIgAESACJiNABtBkglO6RIAIEAEiQASIABEgA0g1QASIABEgAkSACBABkxEgA2gywSldIkAEiAARIAJEgAiQAaQaIAJEgAgQASJABIiAyQiQATSZ4JQuESACRIAIEAEiQATIAFINEAEioIiA1Wr9K4AQURR/oegLCk6yWq17ADwuiuJbRUVFeS6XqxRAgSiK7P/p4ETAarWWCYLwiN1uf51TF9QsESACGidABlDjAlF4REBNAoWFhVcKgsBMATNl9w7u22q1/qXfAF7GIyYygDyoDt+m1Wo92G8A31CvV+qJCBABLREgA6glNSgWIhBkAlardTMANi+MCwsLG7d3795ed0g8VgAHpxsAA2jpj90ZZIya754MoOYlogCJAHcCZAC5I6YOiIA+CFit1pMBbBAEYZIkSesFQbjJbre/M5IBLCgoyLdYLK8COAlAFYA/APiTw+HIKy0trbBarQ8B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3vyQHGypwPdN+5E/ZjyKkgrBVr6/3Fgh3wd4/pxchIcdfS0MHdog4I222oiYolBKgIe2ZACV0qfzhiWgxAB6Qsf7EvDatavw2muvyPdn5ecXgF2mnT17rnzPntsAXnDBWfjHPz6U7wFjBzNgn322XF4BZD967HIgO66//ipce+2NGG4FkPXDVoR+/vNL5XPZSh0btK2traPea8jM0fr13+G779Zg//7v8eqrf8WPf7xYNqDug60SpqamYcmShwdW65gBdF+GZue5DeAf//gMmFmaP/90+evski67fMoeXhja1zvv/Ps4A8hWA88/v3M+qwAAIABJREFU/wJERVlw4YU/kttiBrWtrVW+zDn0svdI+rpXAOPj43HVVf+L8847vh32XWZWN2xYJ68wspVUZlyH02vwPYoj9TnUALIVVaY104Udv/nNbfJq6Jw5pww0wS75MnPrvnzL/rxz5w75cjyrD1YX7GCrp7fccr284uo+WB2w1eNHH30cjz/+GH7yk59DECz44IN/yiuDWjy8+SERmw+guPkAJiZbMSEhDx3dffhm8yHERIVh0UlHH6yhQzsEvNFWO1FTJEoI8NCWDKAS8nTOiAQCYQB5PwTy7LNPyfff/eIXV6KxsUFejbvmmuvk1Tm3Afzd7+7HxImT8LOfXYING76T7zVjl4DZ/WnskiC75MpWwa6++hd48slnhzWAnZ2deP31V/Dii3+WL8nec8/tsvlgq1ts5XC4h03Y5Ue2+sTiYd//yU9+IN9jxozGz39+ifxE6u7dO3H//XfLl3efeOIxjwZw3brV8j2MS5c+A6fTgeuuu0o2sOyy8HB9scucbOXtggt+NGAGmQGsq6vAbbfdjrff/pdsgh9//FFUVh7Ciy++pmgF8OKLL8LTTz8vG+GHH77/uHaeeeZ5XHbZxbLhZU/RstVNdi671DpULxb/BRdc6HEkDjWATz75e/ny8g033CKvAt9xx01gpjcqKmqgrcbGRtnYszji4uJx9923yiug7JaAyy+/GLfddrf8jwXWdnt7m3yfpftgl+EZU3b+b397l/wACrv/87333sKjjz7hMd5gnODND8mexn0obz2EaamTMS4uC5UN7diyvx7ZqbE4qSgtGOFTn6MQ8EZbAqkvAjy0JQOorxrQXLSBMIAsKWYCy9lrYFp70cFeA5MeuNfAsFd5MIMXFhaO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TgOgNTkfAyPnI2/ceCSPKo9GceMxNSr1WliYi4pwJRqLMn8kj6ODg4OFEBAREoQIZdG0CYjwlgEwbRs4IJWAGwFwtZ6IBU63MiNALzLjpsIoequCS5lppLeZcVNhlAhvGQBVcF5ijQyAEpvjQJqIw8aBHA51kQC9dRGmZKXorWSGuChHhLcMgC4aFMRSDID+dF3EYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXUglWIGQKnscE2MiMPGNXEs5IgAvXWET+rB9FZqexyJE+EtA6AjSziYAdCfa0DEYeNPUup1RW/V88yuYnprl5R614nwlgFQvXVAxSRAAiRA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\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"pagos_50 = calcular_pagos(1.5, semestral=False)\n",
"grafico_alquileres(pagos_semestral, pagos_50, tasa_semestral, 1.5)\n",
"_ = title('Alquileres mensuales')"
]
},
{
"cell_type": "code",
"execution_count": 103,
"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 = $('<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",
" 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",
" fig.waiting = false;\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",
" '<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 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);\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 = $('<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'];\n",
" var y0 = fig.canvas.height - msg['y0'];\n",
" var x1 = msg['x1'];\n",
" var y1 = fig.canvas.height - msg['y1'];\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",
" 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",
" 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",
"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;\n",
" var y = canvas_pos.y;\n",
"\n",
" this.send_message(name, {x: x, y: y, button: event.button,\n",
" step: event.step});\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",
" 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 overriden (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",
" // 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 + '\">');\n",
" fig.send_message('closing', {});\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 dataURL = this.canvas.toDataURL();\n",
" this.cell_info[1]['text/html'] = '<img src=\"' + dataURL + '\">';\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-danger\" href=\"#\" title=\"Close figure\"><i class=\"fa fa-times icon-remove icon-large\"></i></button>');\n",
" button.click(function (evt) { fig.handle_close(fig, {}); } );\n",
" button.mouseover('Close figure', toolbar_mouse_event);\n",
" buttongrp.append(button);\n",
" var titlebar = this.root.find($('.ui-dialog-titlebar'));\n",
" titlebar.prepend(buttongrp);\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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SIAESIAESMBxBGgAHScZAyYBEiABEiABEiCB8gjQAJbHj7VJgARIgARIgARIwHEEaAAdJxkDJgESIAESIAESIIHyCNAAlsePtUmABEiABEiABEjAcQRoAB0nGQMmARIgARIgARIggfII0ACWx4+1SYAESIAESIAESMBxBGgAHScZAyYBEiABEiABEiCB8gjQAJbHj7VJgARIgARIgARIwHEEaAAdJxkDJgESIAESIAESIIHyCNAAlsePtUmABEiABEiABEjAcQRoAB0nGQMmARIgARIgARIggfII0ACWx4+1SYAESIAESIAESMBxBGgAHScZAyYBEiABEiABEiCB8gjQAJbHj7VJgARIgARIgARIwHEEaAAdJxkDJgESIAESIAESIIHyCNAAlsePtUmABEiABEiABEjAcQRoAB0nGQMmARIgARIgARIggfII0ACWx4+1SYAESIAESIAESMBxBGgAHScZAyYBEiABEiABEiCB8gjQAJbHj7VJgARIgARIgARIwHEEaAAdJxkDJgESIAESIAESIIHyCNAAlsePtUmABEiABEiABEjAcQRoAB0nGQMmARIgARIgARIggfII0ACWx4+1SYAESIAESIAESMBxBGgAHScZAyYBEiABEiABEiCB8gjQAJbHj7VJgARIgARIgARIwHEEaAAdJxkDJgESIAESIAESIIHyCPx/Bt6ih6gAAMsAAAAASUVORK5CYII=\">"
],
"text/plain": [
"<IPython.core.display.HTML object>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"grafico_alquileres(np.cumsum(pagos_semestral), np.cumsum(pagos_50), tasa_semestral, 1.5)\n",
"_ = title('Acumulado de pagos pagado')"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Con un aumento de 15% semestral pagas 29.96 alquileres\n",
"Con un aumento de 50.00% anual pagas 30.00 alquileres\n",
"Diferencia de alquileres: -0.04\n"
]
}
],
"source": [
"comparar_pagos(tasa_semestral, pagos_semestral, 1.5, pagos_50)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Como verás, hay una pequeña diferencia de 0.04. Eso es porque hice un redondeo en la tasa anual, no es exactamente 50%, es 49.6687%"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#Apéndice 1"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Si tenemos una tasa $t$ que ocurre $n$ veces en el período en cuestión (por ejemplo 4 veces si es semestral, 2 veces si es anual), entonces lo que queremos calcular es\n",
"\n",
"$$\\sum_{i=1}^n \\frac{24 r^i}{n} = \\frac{24}{n} \\frac{1 - r^n}{1 - r}$$\n",
"\n",
"En el caso de la tasa anual del 50%, $n=2$ y $t=1.5$, entonces la cuenta es \n",
"\n",
"$$ \\frac{24}{2} \\frac{1 - 1.5 ^ 2}{1 - 1.5} = 30 $$\n",
"\n",
"Similar para el caso del 15% semestral, $n=4$ y $t=1.15$\n",
"\n",
"$$ \\frac{24}{4} \\frac{1 - 1.15 ^ 4}{1 - 1.15} = 29.96 $$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Funciones auxiliares"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Using matplotlib backend: nbAgg\n",
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%matplotlib nbagg\n",
"%pylab\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def calcular_pagos(tasa, semestral=True):\n",
" pagos = []\n",
" alquiler = 1\n",
" for mes in xrange(1, 25):\n",
" pagos.append(alquiler)\n",
" if mes % 6 == 0 and semestral: alquiler*=tasa\n",
" elif mes % 12 == 0 and not semestral: alquiler*=tasa\n",
" return pagos"
]
},
{
"cell_type": "code",
"execution_count": 97,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def grafico_alquileres(pagos_semestral, pagos_anual, tasa_semestral, tasa_anual):\n",
" figure()\n",
" \n",
" plot(range(1,25), pagos_semestral, '-o', label='alquiler semestral, tasa: %.02f%%' % ((tasa_semestral - 1)*100), alpha=.5)\n",
" plot(range(1,25), pagos_anual, '-o', label='alquiler anual, tasa: %.02f%%' % ((tasa_anual-1)*100), alpha=.5)\n",
" \n",
" ylim(0.95, max(max(pagos_semestral), max(pagos_anual)) * 1.05)\n",
" xlim(0, 25)\n",
" xticks([1, 6, 12, 18, 24])\n",
" \n",
" legend(loc='center left')"
]
},
{
"cell_type": "code",
"execution_count": 86,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def comparar_pagos(tasa_semestral, pagos_semestral, tasa_anual, pagos_anual):\n",
" print \"Con un aumento de %.0f%% semestral pagas %.02f alquileres\" % ((tasa_semestral-1)*100, sum(pagos_semestral))\n",
" print \"Con un aumento de %.02f%% anual pagas %.02f alquileres\" % ((tasa_anual-1)*100, sum(pagos_anual))\n",
" print \"Diferencia de alquileres: %.02f\" % (sum(pagos_semestral) - sum(pagos_anual))"
]
}
],
"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.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment