diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb b/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb index cb0b39b..6eb615e 100644 --- a/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb +++ b/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -28,7 +28,9 @@ "
" ] }, - "metadata": {}, + "metadata": { + "needs_background": "light" + }, "output_type": "display_data" } ], @@ -46,32 +48,13 @@ }, { "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[]" - ] - }, - "execution_count": 2, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], + "execution_count": null, + "metadata": { + "lines_to_next_cell": 2 + }, + "outputs": [], "source": [ - "plt.plot([1, 2, 3, 4], [1, 4, 9, 16])\n" + "plt.plot([1, 2, 3, 4], [1, 4, 9, 16])" ] }, { diff --git a/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py b/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py new file mode 100644 index 0000000..5e40e2c --- /dev/null +++ b/0_numpy_matplotlib_scipy_sympy/matplotlib_simple_tutorial.py @@ -0,0 +1,123 @@ +# -*- coding: utf-8 -*- +# --- +# jupyter: +# jupytext_format_version: '1.2' +# kernelspec: +# display_name: Python 3 +# language: python +# name: python3 +# language_info: +# codemirror_mode: +# name: ipython +# version: 3 +# file_extension: .py +# mimetype: text/x-python +# name: python +# nbconvert_exporter: python +# pygments_lexer: ipython3 +# version: 3.5.2 +# --- + +# # matplotlib +# +# + +# ## 1. pyplot +# matplotlib.pyplot is a collection of command style functions that make matplotlib work like MATLAB. Each pyplot function makes some change to a figure: e.g., creates a figure, creates a plotting area in a figure, plots some lines in a plotting area, decorates the plot with labels, etc. In matplotlib.pyplot various states are preserved across function calls, so that it keeps track of things like the current figure and plotting area, and the plotting functions are directed to the current axes (please note that “axes” here and in most places in the documentation refers to the axes part of a figure and not the strict mathematical term for more than one axis). + +# + +# This line configures matplotlib to show figures embedded in the notebook, +# instead of opening a new window for each figure. More about that later. +# If you are using an old version of IPython, try using '%pylab inline' instead. +# %matplotlib inline + +import matplotlib.pyplot as plt +plt.plot([1,2,3,4]) +plt.ylabel('some numbers') +plt.show() +# - + +plt.plot([1, 2, 3, 4], [1, 4, 9, 16]) + + +# For every x, y pair of arguments, there is an optional third argument which is the format string that indicates the color and line type of the plot. The letters and symbols of the format string are from MATLAB, and you concatenate a color string with a line style string. The default format string is ‘b-‘, which is a solid blue line. For example, to plot the above with red circles, you would issue + +import matplotlib.pyplot as plt +plt.plot([1,2,3,4], [1,4,9,16], 'ro') +plt.axis([0, 6, 0, 20]) +plt.show() + +# + +import numpy as np +import matplotlib.pyplot as plt + +# evenly sampled time at 200ms intervals +t = np.arange(0., 5., 0.2) + +# red dashes, blue squares and green triangles +plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^') +plt.show() +# - + +# ### [Controlling line properties](https://matplotlib.org/users/pyplot_tutorial.html#controlling-line-properties) +# +# Lines have many attributes that you can set: linewidth, dash style, antialiased, etc; see matplotlib.lines.Line2D. There are several ways to set line properties +# + +# ### Working with multiple figures and axes +# +# MATLAB, and pyplot, have the concept of the current figure and the current axes. All plotting commands apply to the current axes. The function gca() returns the current axes (a matplotlib.axes.Axes instance), and gcf() returns the current figure (matplotlib.figure.Figure instance). Normally, you don’t have to worry about this, because it is all taken care of behind the scenes. Below is a script to create two subplots. +# +# + +# + +import numpy as np +import matplotlib.pyplot as plt + +def f(t): + return np.exp(-t) * np.cos(2*np.pi*t) + +t1 = np.arange(0.0, 5.0, 0.1) +t2 = np.arange(0.0, 5.0, 0.02) + +plt.figure(1) +plt.subplot(211) +plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k') + +plt.subplot(212) +plt.plot(t2, np.cos(2*np.pi*t2), 'r--') +plt.show() +# - + +# ## 2. Image + +# + +import matplotlib.pyplot as plt +import matplotlib.image as mpimg +import numpy as np + +# load image +img=mpimg.imread('example.png') + +imgplot = plt.imshow(img) + +# - + +# ### Applying pseudocolor schemes to image plots + +lum_img = img[:,:,0] +plt.imshow(lum_img) + +# use 'hot' color map +plt.imshow(lum_img, cmap="hot") +plt.colorbar() + +# ### Examining a specific data range +# + +plt.hist(lum_img.ravel(), bins=256, range=(0.0, 1.0), fc='k', ec='k') + +# ## References +# +# * [Pyplot tutorial](https://matplotlib.org/users/pyplot_tutorial.html) +# * [Image tutorial](https://matplotlib.org/users/image_tutorial.html) diff --git a/0_numpy_matplotlib_scipy_sympy/numpy.ipynb b/0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb similarity index 100% rename from 0_numpy_matplotlib_scipy_sympy/numpy.ipynb rename to 0_numpy_matplotlib_scipy_sympy/numpy_tutorial.ipynb diff --git a/1_logistic_regression/Least_squares.ipynb b/1_logistic_regression/Least_squares.ipynb index e6996ac..10cd6c9 100644 --- a/1_logistic_regression/Least_squares.ipynb +++ b/1_logistic_regression/Least_squares.ipynb @@ -18,7 +18,7 @@ }, { "cell_type": "code", - "execution_count": 1, + "execution_count": 2, "metadata": {}, "outputs": [ { @@ -106,7 +106,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 3, "metadata": {}, "outputs": [ { @@ -212,7 +212,7 @@ }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -497,13 +497,7 @@ "epoch 275: loss = 2018321.374339, a = 403.082778, b = 152.868098\n", "epoch 276: loss = 2017130.524440, a = 404.173271, b = 152.867402\n", "epoch 277: loss = 2015944.427495, a = 405.261583, b = 152.866707\n", - "epoch 278: loss = 2014763.064523, a = 406.347719, b = 152.866013\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 278: loss = 2014763.064523, a = 406.347719, b = 152.866013\n", "epoch 279: loss = 2013586.416620, a = 407.431683, b = 152.865321\n", "epoch 280: loss = 2012414.464959, a = 408.513480, b = 152.864630\n", "epoch 281: loss = 2011247.190786, a = 409.593113, b = 152.863940\n", @@ -975,7 +969,13 @@ "epoch 747: loss = 1765080.409388, a = 736.413451, b = 152.655201\n", "epoch 748: loss = 1764899.846541, a = 736.837393, b = 152.654930\n", "epoch 749: loss = 1764720.003201, a = 737.260487, b = 152.654660\n", - "epoch 750: loss = 1764540.876496, a = 737.682735, b = 152.654390\n", + "epoch 750: loss = 1764540.876496, a = 737.682735, b = 152.654390\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "epoch 751: loss = 1764362.463568, a = 738.104139, b = 152.654121\n", "epoch 752: loss = 1764184.761567, a = 738.524700, b = 152.653853\n", "epoch 753: loss = 1764007.767659, a = 738.944420, b = 152.653585\n", @@ -1500,7 +1500,13 @@ "epoch 1272: loss = 1725310.896600, a = 874.295618, b = 152.567136\n", "epoch 1273: loss = 1725288.607410, a = 874.443841, b = 152.567042\n", "epoch 1274: loss = 1725266.406608, a = 874.591768, b = 152.566947\n", - "epoch 1275: loss = 1725244.293841, a = 874.739399, b = 152.566853\n", + "epoch 1275: loss = 1725244.293841, a = 874.739399, b = 152.566853\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "epoch 1276: loss = 1725222.268760, a = 874.886735, b = 152.566759\n", "epoch 1277: loss = 1725200.331014, a = 875.033776, b = 152.566665\n", "epoch 1278: loss = 1725178.480257, a = 875.180523, b = 152.566571\n", @@ -1691,13 +1697,7 @@ "epoch 1463: loss = 1722320.669650, a = 897.846452, b = 152.552095\n", "epoch 1464: loss = 1722310.221696, a = 897.947581, b = 152.552030\n", "epoch 1465: loss = 1722299.815032, a = 898.048508, b = 152.551965\n", - "epoch 1466: loss = 1722289.449493, a = 898.149233, b = 152.551901\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 1466: loss = 1722289.449493, a = 898.149233, b = 152.551901\n", "epoch 1467: loss = 1722279.124916, a = 898.249757, b = 152.551837\n", "epoch 1468: loss = 1722268.841137, a = 898.350080, b = 152.551773\n", "epoch 1469: loss = 1722258.597995, a = 898.450202, b = 152.551709\n", @@ -1948,13 +1948,7 @@ "epoch 1714: loss = 1720654.171533, a = 917.819508, b = 152.539338\n", "epoch 1715: loss = 1720650.292133, a = 917.880698, b = 152.539299\n", "epoch 1716: loss = 1720646.427958, a = 917.941766, b = 152.539260\n", - "epoch 1717: loss = 1720642.578948, a = 918.002711, b = 152.539221\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 1717: loss = 1720642.578948, a = 918.002711, b = 152.539221\n", "epoch 1718: loss = 1720638.745042, a = 918.063534, b = 152.539182\n", "epoch 1719: loss = 1720634.926181, a = 918.124236, b = 152.539143\n", "epoch 1720: loss = 1720631.122305, a = 918.184817, b = 152.539104\n", @@ -2202,13 +2196,7 @@ "epoch 1962: loss = 1720037.716759, a = 929.792988, b = 152.531690\n", "epoch 1963: loss = 1720036.246549, a = 929.830235, b = 152.531667\n", "epoch 1964: loss = 1720034.782046, a = 929.867408, b = 152.531643\n", - "epoch 1965: loss = 1720033.323226, a = 929.904506, b = 152.531619\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 1965: loss = 1720033.323226, a = 929.904506, b = 152.531619\n", "epoch 1966: loss = 1720031.870069, a = 929.941529, b = 152.531596\n", "epoch 1967: loss = 1720030.422552, a = 929.978479, b = 152.531572\n", "epoch 1968: loss = 1720028.980651, a = 930.015355, b = 152.531548\n", @@ -2285,7 +2273,13 @@ "epoch 2039: loss = 1719939.679051, a = 932.453563, b = 152.529991\n", "epoch 2040: loss = 1719938.588590, a = 932.485490, b = 152.529971\n", "epoch 2041: loss = 1719937.502342, a = 932.517352, b = 152.529950\n", - "epoch 2042: loss = 1719936.420291, a = 932.549151, b = 152.529930\n", + "epoch 2042: loss = 1719936.420291, a = 932.549151, b = 152.529930\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "epoch 2043: loss = 1719935.342420, a = 932.580887, b = 152.529910\n", "epoch 2044: loss = 1719934.268714, a = 932.612559, b = 152.529890\n", "epoch 2045: loss = 1719933.199154, a = 932.644167, b = 152.529869\n", @@ -2562,13 +2556,7 @@ "epoch 2316: loss = 1719753.548720, a = 939.248962, b = 152.525651\n", "epoch 2317: loss = 1719753.171404, a = 939.267300, b = 152.525639\n", "epoch 2318: loss = 1719752.795512, a = 939.285601, b = 152.525627\n", - "epoch 2319: loss = 1719752.421041, a = 939.303866, b = 152.525616\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 2319: loss = 1719752.421041, a = 939.303866, b = 152.525616\n", "epoch 2320: loss = 1719752.047983, a = 939.322094, b = 152.525604\n", "epoch 2321: loss = 1719751.676335, a = 939.340286, b = 152.525593\n", "epoch 2322: loss = 1719751.306089, a = 939.358441, b = 152.525581\n", @@ -2706,7 +2694,13 @@ "epoch 2454: loss = 1719712.865738, a = 941.462375, b = 152.524237\n", "epoch 2455: loss = 1719712.641027, a = 941.476287, b = 152.524228\n", "epoch 2456: loss = 1719712.417151, a = 941.490171, b = 152.524219\n", - "epoch 2457: loss = 1719712.194107, a = 941.504027, b = 152.524211\n", + "epoch 2457: loss = 1719712.194107, a = 941.504027, b = 152.524211\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ "epoch 2458: loss = 1719711.971892, a = 941.517856, b = 152.524202\n", "epoch 2459: loss = 1719711.750502, a = 941.531657, b = 152.524193\n", "epoch 2460: loss = 1719711.529935, a = 941.545430, b = 152.524184\n", @@ -3213,13 +3207,7 @@ "epoch 2961: loss = 1719660.837327, a = 945.897818, b = 152.521404\n", "epoch 2962: loss = 1719660.800573, a = 945.902860, b = 152.521401\n", "epoch 2963: loss = 1719660.763943, a = 945.907892, b = 152.521398\n", - "epoch 2964: loss = 1719660.727437, a = 945.912915, b = 152.521395\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ + "epoch 2964: loss = 1719660.727437, a = 945.912915, b = 152.521395\n", "epoch 2965: loss = 1719660.691055, a = 945.917927, b = 152.521391\n", "epoch 2966: loss = 1719660.654795, a = 945.922929, b = 152.521388\n", "epoch 2967: loss = 1719660.618658, a = 945.927922, b = 152.521385\n", @@ -3305,7 +3293,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 8, "metadata": {}, "outputs": [ { @@ -4091,799 +4079,7 @@ { "data": { "text/html": [ - "" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "application/javascript": [ - "/* Put everything inside the global mpl namespace */\n", - "window.mpl = {};\n", - "\n", - "\n", - "mpl.get_websocket_type = function() {\n", - " if (typeof(WebSocket) !== 'undefined') {\n", - " return WebSocket;\n", - " } else if (typeof(MozWebSocket) !== 'undefined') {\n", - " return MozWebSocket;\n", - " } else {\n", - " alert('Your browser does not have WebSocket support.' +\n", - " 'Please try Chrome, Safari or Firefox ≥ 6. ' +\n", - " 'Firefox 4 and 5 are also supported but you ' +\n", - " 'have to enable WebSockets in about:config.');\n", - " };\n", - "}\n", - "\n", - "mpl.figure = function(figure_id, websocket, ondownload, parent_element) {\n", - " this.id = figure_id;\n", - "\n", - " this.ws = websocket;\n", - "\n", - " this.supports_binary = (this.ws.binaryType != undefined);\n", - "\n", - " if (!this.supports_binary) {\n", - " var warnings = document.getElementById(\"mpl-warnings\");\n", - " if (warnings) {\n", - " warnings.style.display = 'block';\n", - " warnings.textContent = (\n", - " \"This browser does not support binary websocket messages. \" +\n", - " \"Performance may be slow.\");\n", - " }\n", - " }\n", - "\n", - " this.imageObj = new Image();\n", - "\n", - " this.context = undefined;\n", - " this.message = undefined;\n", - " this.canvas = undefined;\n", - " this.rubberband_canvas = undefined;\n", - " this.rubberband_context = undefined;\n", - " this.format_dropdown = undefined;\n", - "\n", - " this.image_mode = 'full';\n", - "\n", - " this.root = $('
');\n", - " this._root_extra_style(this.root)\n", - " this.root.attr('style', 'display: inline-block');\n", - "\n", - " $(parent_element).append(this.root);\n", - "\n", - " this._init_header(this);\n", - " this._init_canvas(this);\n", - " this._init_toolbar(this);\n", - "\n", - " var fig = this;\n", - "\n", - " this.waiting = false;\n", - "\n", - " this.ws.onopen = function () {\n", - " fig.send_message(\"supports_binary\", {value: fig.supports_binary});\n", - " fig.send_message(\"send_image_mode\", {});\n", - " if (mpl.ratio != 1) {\n", - " fig.send_message(\"set_dpi_ratio\", {'dpi_ratio': mpl.ratio});\n", - " }\n", - " fig.send_message(\"refresh\", {});\n", - " }\n", - "\n", - " this.imageObj.onload = function() {\n", - " if (fig.image_mode == 'full') {\n", - " // Full images could contain transparency (where diff images\n", - " // almost always do), so we need to clear the canvas so that\n", - " // there is no ghosting.\n", - " fig.context.clearRect(0, 0, fig.canvas.width, fig.canvas.height);\n", - " }\n", - " fig.context.drawImage(fig.imageObj, 0, 0);\n", - " };\n", - "\n", - " this.imageObj.onunload = function() {\n", - " fig.ws.close();\n", - " }\n", - "\n", - " this.ws.onmessage = this._make_on_message_function(this);\n", - "\n", - " this.ondownload = ondownload;\n", - "}\n", - "\n", - "mpl.figure.prototype._init_header = function() {\n", - " var titlebar = $(\n", - " '
');\n", - " var titletext = $(\n", - " '
');\n", - " titlebar.append(titletext)\n", - " this.root.append(titlebar);\n", - " this.header = titletext[0];\n", - "}\n", - "\n", - "\n", - "\n", - "mpl.figure.prototype._canvas_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "\n", - "mpl.figure.prototype._root_extra_style = function(canvas_div) {\n", - "\n", - "}\n", - "\n", - "mpl.figure.prototype._init_canvas = function() {\n", - " var fig = this;\n", - "\n", - " var canvas_div = $('
');\n", - "\n", - " canvas_div.attr('style', 'position: relative; clear: both; outline: 0');\n", - "\n", - " function canvas_keyboard_event(event) {\n", - " return fig.key_event(event, event['data']);\n", - " }\n", - "\n", - " canvas_div.keydown('key_press', canvas_keyboard_event);\n", - " canvas_div.keyup('key_release', canvas_keyboard_event);\n", - " this.canvas_div = canvas_div\n", - " this._canvas_extra_style(canvas_div)\n", - " this.root.append(canvas_div);\n", - "\n", - " var canvas = $('');\n", - " canvas.addClass('mpl-canvas');\n", - " canvas.attr('style', \"left: 0; top: 0; z-index: 0; outline: 0\")\n", - "\n", - " this.canvas = canvas[0];\n", - " this.context = canvas[0].getContext(\"2d\");\n", - "\n", - " var backingStore = this.context.backingStorePixelRatio ||\n", - "\tthis.context.webkitBackingStorePixelRatio ||\n", - "\tthis.context.mozBackingStorePixelRatio ||\n", - "\tthis.context.msBackingStorePixelRatio ||\n", - "\tthis.context.oBackingStorePixelRatio ||\n", - "\tthis.context.backingStorePixelRatio || 1;\n", - "\n", - " mpl.ratio = (window.devicePixelRatio || 1) / backingStore;\n", - "\n", - " var rubberband = $('');\n", - " rubberband.attr('style', \"position: absolute; left: 0; top: 0; z-index: 1;\")\n", - "\n", - " var pass_mouse_events = true;\n", - "\n", - " canvas_div.resizable({\n", - " start: function(event, ui) {\n", - " pass_mouse_events = false;\n", - " },\n", - " resize: function(event, ui) {\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " stop: function(event, ui) {\n", - " pass_mouse_events = true;\n", - " fig.request_resize(ui.size.width, ui.size.height);\n", - " },\n", - " });\n", - "\n", - " function mouse_event_fn(event) {\n", - " if (pass_mouse_events)\n", - " return fig.mouse_event(event, event['data']);\n", - " }\n", - "\n", - " rubberband.mousedown('button_press', mouse_event_fn);\n", - " rubberband.mouseup('button_release', mouse_event_fn);\n", - " // Throttle sequential mouse events to 1 every 20ms.\n", - " rubberband.mousemove('motion_notify', mouse_event_fn);\n", - "\n", - " rubberband.mouseenter('figure_enter', mouse_event_fn);\n", - " rubberband.mouseleave('figure_leave', mouse_event_fn);\n", - "\n", - " canvas_div.on(\"wheel\", function (event) {\n", - " event = event.originalEvent;\n", - " event['data'] = 'scroll'\n", - " if (event.deltaY < 0) {\n", - " event.step = 1;\n", - " } else {\n", - " event.step = -1;\n", - " }\n", - " mouse_event_fn(event);\n", - " });\n", - "\n", - " canvas_div.append(canvas);\n", - " canvas_div.append(rubberband);\n", - "\n", - " this.rubberband = rubberband;\n", - " this.rubberband_canvas = rubberband[0];\n", - " this.rubberband_context = rubberband[0].getContext(\"2d\");\n", - " this.rubberband_context.strokeStyle = \"#000000\";\n", - "\n", - " this._resize_canvas = function(width, height) {\n", - " // Keep the size of the canvas, canvas container, and rubber band\n", - " // canvas in synch.\n", - " canvas_div.css('width', width)\n", - " canvas_div.css('height', height)\n", - "\n", - " canvas.attr('width', width * mpl.ratio);\n", - " canvas.attr('height', height * mpl.ratio);\n", - " canvas.attr('style', 'width: ' + width + 'px; height: ' + height + 'px;');\n", - "\n", - " rubberband.attr('width', width);\n", - " rubberband.attr('height', height);\n", - " }\n", - "\n", - " // Set the figure to an initial 600x600px, this will subsequently be updated\n", - " // upon first draw.\n", - " this._resize_canvas(600, 600);\n", - "\n", - " // Disable right mouse context menu.\n", - " $(this.rubberband_canvas).bind(\"contextmenu\",function(e){\n", - " return false;\n", - " });\n", - "\n", - " function set_focus () {\n", - " canvas.focus();\n", - " canvas_div.focus();\n", - " }\n", - "\n", - " window.setTimeout(set_focus, 100);\n", - "}\n", - "\n", - "mpl.figure.prototype._init_toolbar = function() {\n", - " var fig = this;\n", - "\n", - " var nav_element = $('
')\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 = $('