{ "metadata": { "name": "", "signature": "sha256:2f477d25f4792ce73aef34c90ff3fdf53308e10c43a333c5288c8f99d31a3d28" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

PLOTLY MATLAB API

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", ">
WELCOME! This Notebook is designed to demonstrate the use of the Plotly MATLAB API and to showcase three **\\*NEW\\*** API functions:
\n", "\n", "
\n", "\n", "
fig2plotly.m
    ** \u2022 **   \n", "
getplotlyfig.m
    ** \u2022 **   \n", "
saveplotlyfig.m
\n", "\n", "
\n", " \n", "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
New to Plotly?
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Plotly** is a browser-based **data analysis and visualization tool** that lets you and your team **make** and **share** beautiful, **interactive** graphs, **3D** graphs, and **streaming** graphs using MATLAB, Python, IPython, matplotlib, R, ggplot2, and Excel. \n", "\n", "This API allows MATLAB users to generate Plotly graphs from the desktop MATLAB environment: turning MATLAB figures into **interactive, shareable, collaborative** projects.\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Plotly MATLAB API Workflow:
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Collect or generate some data in your MATLAB environment\n", "- Send data to your Plotly account through this Plotly MATLAB API\n", "- View interactive graph in your browser\n", "- Style graph in the Plotly GUI\n", "- Share graph by URL shortlinks, Facebook, or Twitter\n", "- Export to PNG, PDF, EPS, SVG\n", "\n", "- **\\*NEW\\*** Plot your MATLAB figure objects with Plotly using **fig2plotly.m**\n", "- **\\*NEW\\*** Get data, style, and layout from the plots stored online **getplotlyfig.m**\n", "- **\\*NEW\\*** Save your Plotly figures as an image in MATLAB using **saveplotlyfig.m**\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "
Initial Setup:
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Plotly MATLAB API has been embedded into our MATLAB toolboxes and our Plotly credentials have been saved using **plotlysetup.m**. In order to start using the Plotly MATLAB API all we have to do now is start MATLAB! More information regarding installation / setting up the Plotly MATLAB API can be found on the online documentation.\n", "\n", "**NOTE:** Throughout this notebook we will be using the super awesome pymatbridge package to communicate with MATLAB from Python. Everything that comes below the **%%matlab** decorator will now be read as MATLAB code. To use the MATLAB API on your own machine, simply open the MATLAB application as you normally would." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

>> OPEN YOUR MATLAB ENVIRONMENT!

" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%load_ext pymatbridge" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Starting MATLAB on ZMQ socket ipc:///tmp/pymatbridge\n", "Send 'exit' command to kill the server\n", "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "." ] }, { "output_type": "stream", "stream": "stdout", "text": [ "MATLAB started and connected!\n" ] } ], "prompt_number": 2 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "

fig2plotly.m

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "
\n", "

Plot a MATLAB figure object with Plotly

\n", "
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**\\*NEW\\*** to the Plotly MATLAB API is the **fig2plotly.m** function - the future of the MATLAB API. **fig2plotly.m** allows you to take your MATLAB generated figures and automatically create a Plotly plot, taking care of the conversion from the MATLAB figure object structure to Plotly syntax. \n", "\n", "
\n", "\n", "**

[INPUT]:

**\n", "\n", "

>> resp = fig2plotly()

\n", "

>> resp = fig2plotly(f)

\n", "

>> resp = fig2plotly(gcf)

\n", "

>> resp = fig2plotly(f,'property',value, ... )

\n", "

>> resp = fig2plotly(gcf,'property',value, ... )

\n", "
\n", " **

[WHERE]:

**\n", "\n", "

gcf - root figure object handle [double].

\n", "

f - root figure object [struct] >> f = get(gcf)

\n", "
\n", "**

[PROPERTIES]:

**\n", "\n", "

'name' - name of the plot [string]['untitled']

\n", "

'strip' - use plotly default styling [boolea][0]

\n", "

'open' - opens a browser with plot result [boolean][1]

\n", "
\n", " \n", " **

[OUTPUT]:

**\n", "\n", "

resp - results info of the plot [struct]

\n", "

resp.[url,warning,message,filename,error]

\n", "\n", "
\n", "\n", "If you are properly signed up / in, the **url** field of the structure array, **resp**, will contain the address (associated with your Plotly account) of your newly created Plotly plot. The **filename** field will return a string of your chosen file name, or 'untitled' by default. The **warning**, **message**, and **error** fields will contain a string if anything went wrong or if there are updates for the Plotly MATLAB API. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
Example 1: fig2plotly.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The best way to grasp the **fig2plotly.m** useage is to see it in action! For our first example, let's take a look at a plot featured in the Mathworks plot gallery. \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% FROM MATLAB PLOT GALLERY %\n", "% http://www.mathworks.com/discovery/gallery.html %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "api_path = ('/Users/chuckbronson/Documents/PLOTLY/MATLAB_API_REPO/TEST_PLOTS');\n", "addpath(genpath(api_path));\n", "\n", "load fitdata x y yfit;\n", "fig = figure;\n", "scatter(x, y, 'k');\n", "line(x, yfit, 'color', 'k', 'linestyle', '-', 'linewidth', 2);\n", "line(x, yfit + 0.3, 'color', 'r', 'linestyle', '--', 'linewidth', 2);\n", "line(x, yfit - 0.3, 'color', 'r', 'linestyle', '--', 'linewidth', 2);\n", "legend('Data', 'Localized Regression', 'Confidence Intervals', 2);\n", "xlabel('X');\n", "ylabel('Noisy');\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "resp = fig2plotly(fig); % <---- ONE LINE OF PLOTLY CODE! " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nAElFTkSuQmCC\n" } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above plot is the ouptut from calling the **scatter.m** and **line.m** functions inherent in MATLAB. Using the **fig2plotly.m** function, we are able to extract the relevant data from the MATLAB figure object and throw the output over to our Plotly account! The returned response variable, **resp**, is a structure array which contains a **url** field with the address of our plot. \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "resp.url " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans =\n", "\n", "https://plot.ly/~bronsolo/71\n", "\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's have a look at the newly produced line and scatter plot in Plotly! " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**NOTE:** The following function can be used to embed your Plotly plots within your own NB." ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import HTML\n", "\n", "def show_plot(url, width=700, height=500):\n", " s = '' %\\\n", " (height, \"/\".join(map(str,[url, width, height])), width)\n", " return HTML(s)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/71')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice! We can see how the **fig2plotly.m** function is able to parse all the relevant information for the MATLAB figure object and generate an awesome looking plot, the data for which is now **stored** on the cloud! This means you'll never have to worry about where your data is saved on your computer and you can **share** your newly created plot by simply embedding the link within your website or throwing it over to Facebook or Twitter!\n", "\n", "Another great thing about Plotly is the **interactivity** of the graphs. Try scrolling over the newly created plot to view the labelled data. Holding shift while clicking and dragging allows you to pan. Click and drag to zoom and double click to revert back to the original view. \n", "\n", "We can also now take advantage of the interactive **web app!** You can view/edit all our newly created plots on your online account. By default **fig2plotly.m** will open your default browser and load your Plotly account to view the newly created plot. All the data associated with the plot has been conveniently stored in a spreadsheet that can be accessed by clicking on the the \"View data\" link on the right (image below). \n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "By clicking on the \"Save & edit\" link on the left (image above), we are able to access the main web GUI. This will allow us to tweak and experiment with plotting layout and style without having to write lines upon lines of code. Below is a screen shot of the Plotly web app. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "There are also many style/layout themes to choose from and you can even save your own themes to apply to your graphs. Have a go at changing the syle and layout to suit your personal preferences. Here is one that we made:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/48')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 166, "text": [ "" ] } ], "prompt_number": 166 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once you are finished you can quickly share by hitting \"Share\". This will open a \"Sharing settings\" window (image below) which will allow you to modify the plots privacy settings and add a collaborator to be able to edit the plot you have created!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "You can also click on the social media icons to quickly throw your plot over to Facebook or Twitter to share it with the world!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "
Example 2: fig2plotly.m
\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Lets have a look at how **fig2plotly.m** is able to handle more difficult plot layouts, such as multiple subplots of varying size." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% FROM MATLAB PLOT GALLERY %\n", "% http://www.mathworks.com/discovery/gallery.html %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "fm = 20e3;\n", "fc = 100e3;\n", "tstep = 100e-9;\n", "tmax = 200e-6;\n", "t = 0:tstep:tmax;\n", "xam = (1 + cos(2*pi*fm*t)).*cos(2*pi*fc*t);\n", "T = 1e-6;\n", "N = 200;\n", "nT = 0:T:N*T;\n", "xn = (1 + cos(2*pi*fm*nT)).*cos(2*pi*fc*nT);\n", "figure;\n", "subplot(2, 2, [1 3]);\n", "plot(nT,xn);\n", "xlabel('t');\n", "ylabel('x[n]');\n", "title('Sampled Every T=1e-6 ');\n", "subplot(2, 2, 2);\n", "plot(t, xam);\n", "axis([0 200e-6 -2 2]);\n", "title('AM Modulated Signal');\n", "subplot(2, 2, 4);\n", "plot(nT, xn);\n", "title('Reconstruction at T=4e-6 ');\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "resp = fig2plotly(fig,'strip',1); " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n" } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice MATLAB! Now let's have a look at our newly generated Plotly plot. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/67/')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "" ] } ], "prompt_number": 10 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cool! **fig2plotly.m** preserves the subplot layout structure. It also converts the x-axis labels using the concise SI prefix μ = 10-6. You might notice that the colours for the traces generated using **fig2plotly.m** did not stay blue like the original output from MATLAB. This is because we changed the \"strip\" property of **fig2plotly.m** from \"false\" (default) to \"true\". In doing so we told **fig2plotly.m** to change the style used in MATLAB to Plotly's beautiful default color schemes. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
Example 3A: fig2plotly.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's have a look at some other chart types in MATLAB and apply **fig2plotly.m**. Let's experiment with bar charts with a double y axis. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% FROM MATLAB PLOT GALLERY %\n", "% http://www.mathworks.com/discovery/gallery.html %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "TBdata = [1990 4889 16.4; 1991 5273 17.4; 1992 5382 17.4; 1993 5173 16.5;\n", " 1994 4860 15.4; 1995 4675 14.7; 1996 4313 13.5; 1997 4059 12.5;\n", " 1998 3855 11.7; 1999 3608 10.8; 2000 3297 9.7; 2001 3332 9.6;\n", " 2002 3169 9.0; 2003 3227 9.0; 2004 2989 8.2; 2005 2903 7.9;\n", " 2006 2779 7.4; 2007 2725 7.2];\n", "\n", "years = TBdata(:,1);\n", "cases = TBdata(:,2);\n", "rate = TBdata(:,3);\n", "fig = figure;\n", "[ax, h1, h2] = plotyy(years, cases, years, rate, 'bar', 'plot');\n", "set(h1, 'FaceColor', [0.8, 0.8, 0.8]);\n", "set(h2, 'LineWidth', 2);\n", "title('Tuberculosis Cases: 1991-2007');\n", "xlabel('Years');\n", "set(get(ax(1), 'Ylabel'), 'String', 'Cases');\n", "set(get(ax(2), 'Ylabel'), 'String', 'Infection rate in cases per thousand');\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "filename = 'Tuberculosis Cases';\n", "resp = fig2plotly(fig,'name',filename); " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAGwCAIAAADOgk3lAAAACXBIWXMAAAsSAAALEgHS3X78AAAA\nIXRFWHRTb2Z0d2FyZQBBcnRpZmV4IEdob3N0c2NyaXB0IDguNTRTRzzSAAAWG0lEQVR4nO3dbXKq\nzBYGULj1zug4/xGYMXF/kHQ6oIhIf7JWpU4ZjjEdY3jczaYZp2kaAKA1/ys9AAA4QoAB0CQBBkCT\nBBgATRJgADRJgAHQJAEGQJMEGABNEmAANEmAAdAkAQZAkwQYAE0SYAA0SYAB0CQBBkCTBBgATRJg\nADTpv9IDgF3GcVxsWV9MfBzHE68wvufRXt4nDDv1pc/jkSy+6bMxbAx+/SXbWxa/Hdd5Jw8BRhvi\n/WY9+8eX6ZVh2IvwWCfZegzrdwNr4Z5zPi0eZONH2/PgcAoBRsPiPfLDauNZ3RAXDetHeLg7XtQZ\ni/37Yvv6cfbs4rd/hPVQn93tpZdfcjhrq3p7QfcEGF3ZmEYL/7VdQMQ2qpln3/fAINfZthjz4sF3\nfq91ZbZ/hOFLpBE1E2B07uWOe/8+el23bW9fj+RhUbVxeGn/g6/vH3J6XXSuB/bsEV5+u8XjCDxy\nEmD07GEkLOzf7T6r2x7eflbnLTZuH7La+EY7f5w9X/LwDqKI+gkw2vZsomy7Ae9l3fPsbg+D8Flx\n86x4elZgPfyS9YNvZ9LGmN+ae4y/antUD4/MQQZecwA0yYnMADRJgAHQJAEGQJPqbeLYeUbq9hYA\nTjGOQ7xnnXe3Zfe1lQbY4nTO4W9Kvbu2DQCHrXtsQ5gtUi2zqqcQF2fJAJDfNBWutJ6ptAIb9p2C\n+pJ1RQH2WWbUdmiZQsyhhgKukjqyhmHUMAbDqG0MlQyjhjHUNIyt/woDNIUIAG+rtAJ7uRzOnrVt\nADjdNP3WZ6YQH3t5CYk9WwA4Rbx/rWRfW8VkazqVzCYDtKXswa2dHAMDoEkCDIAmCTAAmiTAAGiS\nAAOgSQIMgCYJMACaJMAAaJIAA6BJAgyAJgkwAJpU72K+xE68MGf965sB7KECa4DLSgOsqcBqd+J1\nd+aHamKRaYCXVGBVO7f2iq8CDtA6AVavOGZOr5lkGNA6AdaAE9MrfigZBjRNgFXqxENfCzIM6IMA\nq1HqXNHEAXRAgFUn6aGv9SMrwoBGCbB6pa6TZBjQNAFWl3SHvnZ+X4BWCLCK5E8RDR1AuwRYLfIc\n+lqTYUCjBFh18rcIyjCgRQKsCqUOfQUa64HmCLDyiqfX4rsrwoAmCLDCqkoLGQY0RIDVorZJPBkG\nVE6AlVTJ5GFMQwfQChe0LCZReo1HY2f6Gcc0/Y7N1S+BagmwMpIWN/f7/d0vud1u8adxhgHUyRRi\nYdXWNxo6gMoJsAIqPPT1kAwDaibAcmslvRZkGFAbAZZVczGgKRGolgDLp9RyvR+SYUCddCEW8Cy9\nPu+AT0RTIlAhAZbJzkNfn3fAJxIyzJlhQCVMIebQR/miKRGoigBLrtFDX9tkGFCcAEsuhFYH6dXB\njwB0wzGwHNra7+/oJZmG7yLszz1T95IAxAQYD2z3kkRdI9P9/vWzMUcvCUBgCpG3hdACKEiAcURU\neP0rOxLgsgQYn5JhQBECjINMJAJlCTCOM5EIFCTA+EhUh+mhB7Kqt40+PhtpmqbwaTjZaM8WAE4R\nr4NayXUNq67Aph/jOMa3h2HYs4U8QhHmWYcujeOfv+759jSVv05F1QE2jqMoaoIMg47NWbUwp1rZ\nCqzeKcThZybwwwxbfLnZxdSKv6aBA97a0cZziQX/3usNsLOSRmLlMurjgHYt9pRNzKZUOoVo5rBF\nLhgG5FRpBbZuO1x8ur7Dw05FSjGRCL2KezccA3tsEULrTNqzhcyKdyUBicT710r2tZVOIdIuE4lA\nHvVWYM05fNyu48LRRCKQjgA70/Z1IB/q8jqQJhKBDAQY5/spRufum2EY9qZZx8UocDoBRhL3+z2q\nLac9117pshgF0tHEQSouGAYkJcBIyAXDgHQEGGnJMCARAUY+Mgw4kQAjOQfDgBQEGDmYSAROJ8DI\nTYYBpxBgZBJPJMow4HMCjHxkGHAiAUZW+zNsPCr9DwFUwVJS5Ha/f4Xout3+bfQoWhwZ2KACowBz\nicDnBBhlyDDgQwKMYmQY8AkBRkl/D4C5GBjwBgFGYXGGaSEE9hNglCfDgAMEGFWQYcC7BBj1GKef\no2AyDHhJgFGX6beTY9KaCGwQYFQnyjDt9cBTAowayTDgJQFGtX6Pg8kwYE2AUS9LdQAbBBhVk2HA\nMwKM2skw4CEBRgNkGLAmwGiDDAMWBBjNkGFATIDRkr+XXwGqM44PPhIRYDQmZNjLImw8Kv0PAd2a\npu+FCOYbU8rL/P2X8LEhjfv9a06v2+3fdk12v9/fffDb7XZ8ZEBGKjAAmiTAaNL+iUQgv2n6PQCW\nbhZRgNE8GQa1iQ8la+KAJR2JULPQxKECgwdMJMKVCTA6IcOgKs4DgxdMJEKF4vlDU4jwlIlEuCYn\nMgNwssW0YaIiTAVGD6KJxJQL1wC7hQWl0hFgdCJkmLUM4SIEGABNEmD0QxEGVZkXlEqn9iaOcRyn\naZpvzFumnynVPVu4rFP+bA5fWsUrkP6sVzXcWOcwz19A1QEWdh8hxsLtPVvyD5gKjOf2cbggCzx8\nI7f97m7OtvBvIvVOIQohjoleNV4/cIL1ychJ15jfr94AO4uL7V6ZU5thp3jlp1b2lJVOIc5JE/97\nmDLuglIfOob+rGusZ+b/Cv8+28XGs4iJVFqBTT8GCcQh4VWjCINzxSscbu+e46hLodIKbGHu0Qi3\nd24BoIh4H3zFJo5ZiKK4Jtu/hWv7/rtRhMHn1nvW4vva2gMMPmGheigiTz9IG1OIADQkT3GmAqNz\nijDolQDjQmQYZJNhClGA0b/oamEFjEcVHDN8aD79a/64ehs9fOh+/5rLr9vtX/48s6AipKAC43JM\nJEIfBBhXUXYiES5lnjmcPy63lBSkoCMRsolXnErEMTAATrZo3EgUYyowrkURBnmECswUIpxGhkEf\nBBiXJsPgXOHk5QzLIQowrkhHIiQSXyosdROHAOOiTCRCCusKLB0BxnXJMDjdugLTxAFpyTA4kcup\nQHLxwTAZBm0RYFxd/Q0d1rOHh6zEAX/Wqi89lsesZ09bki6BGAgwWMgyeQ+9i6cALCUFCcUTiebe\n4ENxC6IuREiu/oNhQEyAwa+QYYow+JATmaEYGQaHhSaO+cqWiQgwWIj/2jR0QL0EGCzlWUQA+pZh\nDkOAwQMhw6o9MwxqFv6Ckp4QJsDgBRkGB7icChQT/+HJMHhXhi5EK3HAhlEfBxwQzxymm0VUgcEW\n1wyDagkweEGGQZ0EGLxBhsFO8TGwRAfDBBi8ZplEeMtiMd9E7YgCDHYxkeiimtRGFyLsFV/38po1\n2bvX1XRRTeb3MLoQoSJt1WHHiif1E4eFQ19JT2RWgcEbQhHWnHeLp0H9RPVUYPAeB8OgEiUDzBwF\njZJh8NI8f9jbYr5zaI3jOLlqBc2SYUU4mNeK0DfvGBhU7bJNiUU4mNeK8LahqwoM+hCHljoMYmHm\ncJ5FTKRMgM3zh2YRaZ0Me4sJQM5VYAoxhJb0ogNxY725xJdMAF5HhjcexSowb6zohjoMFjJcDGwo\n1YU4117zLGL+AcDp/hZephbgtxGxt2Ng0J84w7wx4+LyLCVVbAqxyPeFpGQY5FQgwELvhi5E+iPD\nIJsyJzLPuTX3cTzLsFClhTvHn+7cAiWM4TCYDKMb8XzgnpOUr76U1DRNc6PHfOfwafjy7S1Qyt+X\ntrdTtG0cH7wVm3s0tve14UhYIvU2caiiaFr8+tVbT9NCP2G8Zc9X7bznYfUG2HDScvVO6acUGUZD\n5jIrfOz8krKFRtVLSc3zgR9+r+mvDx8N3iLDKmQ5q4fmMit8bJtDrvgOtdKlpDQo0pHfng5rTVXi\n3RWtLGe1tnMWMWn0l2niePm+JvRuhNaM+NP1HR5ugUoILXoSWjM2Jhvj6OqqC3H4qb32zB/G5dpi\nDnDPFqiEC2DSurBn3TPZ2PPlVOCCZBicS4BBPjKsD8faQK7QCZJZmZU4BkvRc1Xh+mEaOprmwmbb\n+jwGFjosQndG5gFAceowrmBnR/4nik0hqsBgkGHwgawBtmhwl2Fclos4w+c0cUAZMgw+JMCgGBlG\nrw6srHhA1gBbzBlaMgM0Il7TFRrx96+seFjuNvo4w6QXDBrrr0oj/ucKTCFa8AkWNNbTn96mEIGX\nZBg71TwJ+dbFWQ4rthIHEAsTiYMMY7cKrwszL+O7CMpEGaYCg1r8PQBmjp0mhUXoM1RgAgwqookD\n9hNgUJeQYU21TEMBAgyqI8NgD00cUDUZRqM6vJwKsE8cXBo6aMzcizgMDzoSTyTAoFLx+1aN9bAm\nwKBeMox2ZZj9FmBQNWuu0aLwug1ziSkIMKjf91tZRRitmHNr/nAMDC7Nar+0Iqzem3ol30GAQXNk\nGDULa0dZSgr45vLNNCTPsVsBBs2QYbQivhiYY2DAMFjtl3aEicR0BBg0RkMHzAQYtEeGwSDAoHUy\njGolPQlsEGDQKA0dNEEbPfCAhg5qpgsR2OJgGHWKz2JWgQEvyDCuRoBB20wkclkCDJpnIpFrEmDQ\nFRlGDSwlBexlIpHaaOIA9jKRyNUIMOiHDKMeGaYQ/0v1wABcleuBAW+LDoZl2YVAOQIMehMyLOk6\nqrAt9fzhIMCgbzKMIsbxtwVRGz3wBl31XIEAg159v+9VhNErAQZXoKGDrOaZw/nDiczA2/K0MkNs\nrvjjut8xMOCIkGFObSaP+SXnemDAmWQY2eSpwOpdiWP8+aGnaVp/unMLkLSPmeuIj2aFV9R6Xxv+\nK8OrruoKbJqmaZrGcRzHcfoxp9SeLcCP778IRRgHLM5H3j7HK8wZXnoKURUFJ7LOL4cdCKGQbUmr\niXqnEGdzXfVJRbX4WrkIsHZu0oT5xjnJEu13663Awszhh48z/XXK2KBFijA25OkbPFe9ATaoluBs\nMoyeVBpgoS8j1GHx7WEY9mwBNsgwjtmzysalV+JYz/ut5wD3bAEWrPPLMfGetZKZxkoDDEjHRCKp\nLZo4EhFgcGkyjHYJMLgiE4mklmE9idrPAwMSud+/5vJrXYSJNz4Un8ic7lCZAAOWfiJtWiwDMAyC\njRfmxEqaW4EAg+uKK609B8Me3ke5xsJ6EalEYSbAgGF4lEO3223PpZxDqkkyhp+sUoEBhcX7oHEc\n7/f7fPthKXa7/ZNhzPKcIibAgLctgirkmQxjtmhBvNxivkAr3j2WxhVc+npgQEMWGSbGyMAUInCO\nOcPi6cSiw6GwDF2IKjDgTH+PgZVe7ZVC8lxdTIABJ4szbL6gBqQgwIDzLXoRZdh1hMuAxR+JCDAg\nifv9axh+d10y7CIWk4emEIFW/d15OSTGmQQYkFacYTrsOZEAA5JbzCPJME4hwIBsfo+DyTA+J8CA\nfCw6xYkEGJCVRac4iwADcrvfv5RifE6AAWXIMD5kMV+gmPv9a8fiv1N0EvR0u71+zFPGRv1UYEBJ\n8obDVGBAYdsZdrvdpp+TyMZxvN/vz+/5b3BV6CtRgQGdCLnliNpFCDCgHzLsUgQY0BUZdh0CDOiW\nDOubAAN64wyzixBgQIf+NiK6DlmfBBjQpzjDXA+6SwIM6JYM65sAA3omwzomwIDu/QaXDOuJAAP6\nN/1p49DT0QkBBlxCnGF66/sgwICrkGGdEWDAhciwnggw4Gp+GzlkWNMEGHA51prqgwADrkiGdUCA\nARflws2tE2DAdbl4WNMEGHBpMqxdAgy4ujjDxFhDBBjAsqdDkjVBgAEMw6OeDjFWuf9KDwCgFg+P\nh91u/4ZhGsfFisCUV3uAjeM4TdN8Y94y/byI9mwBOGBOskX5Ne9grrl3qfNnrzfAxjG+hM8Yp9Q0\nTXu2ZB4w0JmHBdk4DsMw3W4XOo0sVJ+1laH1Btii8Dps8QiCDXjf/C75z6aQan0kWYuX+qw3wM4i\nsYBThH3JwyRrPcYWe8rFz2gKEaAP4/1+Xxwh66wgC+Jpw9qmELXRAxxxv3/NH4vtOu+zaaMCm3s0\nwu2dWwAyWPd69DGpOJum3+nE2vastVdgIYqmH/F/vdwCkM0isbopxabp+6M2tQcYQEMWk4rW8khK\ngAGcbB1jBQfTMQEGkMQqw+qbg2ucAANIZVGKtXiycM0EGEBaiwwTY2cRYADJ3e9fwxAHl+nEEwgw\ngEziTnQNip8TYAD5LE6oEmOfEGAA+f05DibDjhFgAAU45flzAgygmF5Xn8pDgAGUpBQ7rI3V6AH6\ndr9/xbkV3+5jVfsUBBhAFeagWpdf0RZnj/0hwAAqsr66WMwqHjEBBlCjHevZT7fb8p6XIsAAavcz\nu3ibpmldhF32gJkAA2hJWMhjHMf1UbE5zC4SYwIMoFXbB8y6J8AAmnfNC0A7kRmgKxeZPxwEGACN\nEmAANEmAAdAkAQZAkwQYAE0SYAA0SYAB0CQBBkCTBBgATRJgADRJgAHQJAEGQJMEGABNEmAANEmA\nAdAkAQZAkwQYAE0SYAA0SYAB0CQBBkCTBBgATRJgADRJgAHQJAEGQJMEGABNEmAANEmAAdAkAQZA\nkwRYDrfbrfQQhqGOYdQwhsEwKhvDUMcwahjDUM0whmEsPYDX/is9gDON4/czPk1T2ZEAdONnzzrU\ntmftJ8DGcQy5Fd8G4LA5veYd6jjWlWH9BBgAicQxVo9+KpWHFViYVARg0zIL1lWXCiyrbuIZgAVd\niAA0qZ8pxEEXIkAC1XYhdhVgAFyHKUQAmtRPE8e68zAuLueN21tOHMPDYSy2pJvw3BjGy1GlGMbO\nb5ri7L3anoo9wxgSvDjf/dlTPBUHvmmGYez/pue+Phv9jQwJXpyf6CHA4l75Z830L2+cOIaHw1jv\nwlKcdr09jGff9NynYnj1G8lzwsO7T0W8sexv5PQX5yx+nou8OIe/T2+pF+fwzlOx3rOf6K3fyJD4\nqdj5G0n04jyshynEaZqKP5U1jOHYMFIM+91hpPhjOPYbGcfx9B1EJS+M0kM4MoZEL853vyTR6/PA\nMFKkV9N6qMAeWr/zHUoUwus3bkXOrX74bCy2eCoSlR3vDmNI9uKMa81SDjy36eaWyz4Vbw0j3Yvz\n3Qc0hZhQPBc039g5hZV6GOsbGSy+6cMxpH45vnwqwq9pSJkce56KDF4OI9GLs4adzoExpBj2u4+Z\n6PXZ4m8kw57zXb0FWCVP63oYRQa2+KbPxpB0YC+fijx/EjufitQKDqOGv4sWZxHTvT4b/Y1UpYrd\n/Snio4vzlmdHQR9uOXcMe75pojFsD+PZpylG8tZvZEizN9//VDwbVQfDWP+W8784H77S8r84DzwV\n8dde/DeSYhgf6ifAALiUHroQAbggAQZAkwQYAE0SYAA0SYBBEuEUt/BpwcFAlwQYJKG/F1LTRg8J\nLRZ/2TixZni+XIs/Uniot5U4oDaL9Aq35xsbp4jKLdgmwCCh9VqL258+/EJJBg8JMMhnUW89XGIq\nfFrbwqlQGwEGmWwvebdxZ+Ah7+wAaJI2egCaJMAAaJIAA6BJAgyAJgkwAJokwABokgADoEkCDIAm\nCTAAmiTAAGiSAAOgSQIMgCYJMACaJMAAaJIAA6BJAgyAJgkwAJokwABokgADoEkCDIAmCTAAmiTA\nAGjS/wHeXMt92jZCgQAAAABJRU5ErkJggg==\n" } ], "prompt_number": 150 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The above plot is the ouptut we receive from calling the **plotyy.m** function inherent in MATLAB. Now, Let's grab that url from the **resp** structure aray and have a look at our newly genereted plot using **fig2plotly.m**. \n" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "resp.url" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans =\n", "\n", "https://plot.ly/~bronsolo/82\n", "\n" ] } ], "prompt_number": 7 }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/82')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 151, "text": [ "" ] } ], "prompt_number": 151 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sweet! Now we can use the Plotly web app to customize style an layout to our personal preference. \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Alternatively... we can use the Plotly declaritive syntax to edit the style and layout with **plotly.m**, one of the original API functions. To do this, we will need to use another **\\*NEW\\*** function that simplifies everything: **getplotlyfig.m**.\n", "
\n", "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

getplotlyfig.m

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "
\n", "

Get data, style, and layout from the plots stored online

\n", "
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "One of Plotly's secret powers is the ability to translate between MATLAB's structure/cell array syntax and JSON. This allows a smooth transition between the your figures in MATLAB and those stored in your Plotly account. In order to grab the data, style, and layout information from your plots living online, we've introduce a **\\*NEW\\*** funtion into the API: **getplotlyfig.m**. In fact, we can go one step further: **getploylyfig.m** lets you grab the data, style and layout of *anyone's* Plotly plots (as long as they are made public) - not just your own! See a graph you like online? Grab the data, style and layout and make one for yourself. \n", "
\n", "\n", "

**[INPUT]:**

\n", "\n", "

>> plotlyfigure = fig2plotly(file_owner,file_id)

\n", "
\n", "

**[WHERE]:**

\n", "\n", "

file_owner - user name associated with the plot [string].

\n", "

file_id - number identifier associated with the plot [string]

\n", "
\n", "

**[OUTPUT]:**

\n", "\n", "

plotlyfigure - results info of the plot [struct]

\n", "

plotlyfigure.[data,layout]

\n", "
\n", "\n", "If the provided input arguments are valid, **getplotlyfig.m** returns a **figure** structure with **data** and **layout** fields. The data field is a cell array containing the exact same data, and style information as is required for the **plotly.m** function input. Likewise, the **layout** structure array contains all the layout information in the same form as is required for the **plotly.m** function input. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "
Example 3B: getplotlyfig.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we have a basic understanding of **getplotlyfig.m**, let's have a go at changing the bar and line colours from our previous example!" ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% GET PLOTLY FIG! %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "plotlyfigure = getplotlyfig('bronsolo','82'); \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% DATA/STYLE %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "% COLOUR CHOICES \n", "col1 = '#3C8A22';\n", "col2 = '#097054'; \n", "col3 = 'black'; \n", "\n", "% BAR CHART STYLE \n", "plotlyfigure.data{1}.marker.color = col1;\n", "plotlyfigure.data{1}.marker.line.width = 2; \n", "plotlyfigure.data{1}.marker.line.color = col3; \n", "plotlyfigure.data{1}.opacity = 0.7; \n", "plotlyfigure.data{1}.name = 'Cases'; \n", "\n", "% LINE STYLE \n", "plotlyfigure.data{2}.line.width = 10; \n", "plotlyfigure.data{2}.line.color = col2; \n", "plotlyfigure.data{2}.opacity = 0.7; \n", "plotlyfigure.data{2}.name = 'Infection Rate'; \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% LAYOUT %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "% Y2 AXIS STYLE\n", "plotlyfigure.layout.yaxis2.titlefont.color = col3; \n", "plotlyfigure.layout.yaxis2.tickfont.color = col2;\n", "plotlyfigure.layout.yaxis2.tickcolor = col2; \n", "plotlyfigure.layout.yaxis2.linecolor = col2; \n", "plotlyfigure.layout.yaxis2.linewidth = 2; \n", "\n", "% X AXIS STYLE\n", "plotlyfigure.layout.xaxis.mirror = 0; \n", "plotlyfigure.layout.xaxis.showline = 0; \n", "\n", "% BAR LAYOUT\n", "plotlyfigure.layout.bargap = 0.2; \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% ARGS %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "args.layout = plotlyfigure.layout; \n", "args.filename = 'Tuberculosis Cases'; \n", "args.fileopt = 'new'; \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "resp = plotly(plotlyfigure.data,args);\n", "url = resp.url" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "url =\n", "\n", "https://plot.ly/~bronsolo/162\n", "\n" ] } ], "prompt_number": 183 }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/162')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 184, "text": [ "" ] } ], "prompt_number": 184 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Awesome! Note that we changed the names of the bar and line data so that when we scroll over the plot we get a nicely labeled interactive output. Give it a try!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "
Example 4: getplotlyfig.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we mentioned above, not only does **getplotlyfig.m** help us edit the plots that we made using **fig2plotly.m**, it also allows us to grab the data, style, and layout information from any public Plotly plot (say that three time fast) regardless of the API used to generate them. That means we can grab plots generated in R or Python and throw them into MATLAB to analyze, restyle, and throw back online. It's all the same to Plotly! Let's have a look at how that works. First, check out this sweet plot made by a user named **\"ReadtheBox\"**. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~ReadtheBox/35') " ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 60, "text": [ "" ] } ], "prompt_number": 60 }, { "cell_type": "markdown", "metadata": {}, "source": [ "So sweet! Let's use **getplotlyfig.m** to grab the data/style and layout from this plot. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab\n", "\n", "plotlyfigure = getplotlyfig('ReadtheBox','35') %grab the data from ReadtheBox (awesome Plotly user!)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "plotlyfigure = \n", "\n", " layout: [1x1 struct]\n", " data: {1x9 cell}\n", "\n" ] } ], "prompt_number": 230 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Nice! Now let's have some fun changing things up. Let's have a look at the data field. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "plotlyfigure.data{1}" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans = \n", "\n", " textfont: [1x1 struct]\n", " name: 'Runs'\n", " marker: [1x1 struct]\n", " y: [12 14 9 2 8 5 6 1 1 8 2 4 0 0]\n", " x: {1x14 cell}\n", " line: [1x1 struct]\n", " type: 'bar'\n", " error_y: [1x1 struct]\n", "\n" ] } ], "prompt_number": 62 }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data field is a {1x9} cell array where each element of the cell array corresponds to a different baseball statistic. The first data cell array element, **plotlyfigure.data{1}**, corresponds to the **\"Runs\"** data for each player. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, lets say we only wanted to look at **\"Runs\"** and **\"Hits\"**. We can do that easily by grabbing the first two elements of the data cell array. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% DATA/STYLE %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "traces= {plotlyfigure.data{1},plotlyfigure.data{2}}; % <--- FIRST TWO DATA ELEMENTS\n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% ARGS %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "args.filename = 'Red Sox Offensive Power'; \n", "args.fileopt = 'new';\n", "args.layout = plotlyfigure.layout; \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "resp = plotly(traces,args); % <--- USE PLOTLY TO THROW OUR NEW PLOT ONLINE\n", "resp.url " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans =\n", "\n", "https://plot.ly/~bronsolo/167\n", "\n" ] } ], "prompt_number": 231 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look: " ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/167')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 232, "text": [ "" ] } ], "prompt_number": 232 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Awesome - Go Ellsbury!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now let's change some layout settings. How about we change the barmode from 'stack' to 'group'. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% DATA/STYLE %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "traces= {plotlyfigure.data{1},plotlyfigure.data{2}}; % <--- FROM BEFORE! \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% LAYOUT %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "plotlyfigure.layout.barmode = 'group'; % <--- CHANGE FROM STACK TO GROUP! \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% ARGS %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "% ARGS STRUCTURE \n", "args.filename = 'Red Sox Offensive Power'; \n", "args.fileopt = 'new';\n", "args.layout = plotlyfigure.layout; \n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "resp = plotly(traces,args); \n", "resp.url" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans =\n", "\n", "https://plot.ly/~bronsolo/149\n", "\n" ] } ], "prompt_number": 67 }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/149')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 68, "text": [ "" ] } ], "prompt_number": 68 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cool!\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "But... what happens if we want to put our graph in a report or thesis? So far all we have seen is how to share/embed our plots online. What we need now is to save our Plotly figures as images. For that we use the **\\*NEW\\*** **saveplotlyfig.m** function... \n", "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

saveplotlyfig.m

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "
\n", "

Save your MATLAB figure as an image using Plotly

\n", "
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**saveplotlyfig.m** allows you to convert your MATLAB figures into static images using Plotly.\n", "\n", "
\n", "\n", "

**[INPUT]:**

\n", "

>> saveplotlyfig(data, layout, filename)

\n", "
\n", "

**[WHERE]:**

\n", "
\n", "

data - data/style of plot [cell array]

\n", "

layout - layout of plot [struct]

\n", "

filename - name of image to be saved [string]

\n", "
\n", "

**[OUTPUT]:**

\n", "

PNG image 'filename' saved to your working directory

\n", "\n", "
\n", "\n", "Currently **saveplotlyfig.m** supports PNG and is in the process of expanding to accomodate other graphics formats. If **data**, **layout** and **filename** are structure correctly, **saveplotlyfig.m** will automatically save the PNG image named 'filename' to your working directory. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "
EXAMPLE 5: saveplotlyfig.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's have a look at **saveplotlyfig.m** to see how it works. Check out this next plot that was featured on the MATLAB plot gallery. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% FROM MATLAB PLOT GALLERY %\n", "% http://www.mathworks.com/discovery/gallery.html %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "% Load Morse data\n", "load MDdata dissimilarities dist1 dist2 dist3\n", "\n", "% Plot the first set of data in blue\n", "fig = figure;\n", "plot(dissimilarities, dist1, 'bo');\n", "hold on;\n", "\n", "% Plot the second set of data in red\n", "plot(dissimilarities, dist2, 'r+');\n", "\n", "% Plot the third set of data in green\n", "plot(dissimilarities, dist3, 'g^');\n", "\n", "% Add title and axis labels\n", "title('Morse Signal Analysis');\n", "xlabel('Dissimilarities');\n", "ylabel('Distances');\n", "\n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% PLOTLY %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "filename = 'morse'; \n", "resp = fig2plotly(fig,'name',filename);\n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\nSv4H4QonmYHr1LAAAAAASUVORK5CYII=\n" } ], "prompt_number": 221 }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "resp.url " ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "ans =\n", "\n", "https://plot.ly/~bronsolo/165\n", "\n" ] } ], "prompt_number": 222 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Good job MATLAB - let's look at the Plotly graph we created! " ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~bronsolo/165/')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 225, "text": [ "" ] } ], "prompt_number": 225 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "So awesome! Now let's save this plot as a PNG image using **saveplotlyfig.m**. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% GET PLOTLY FIG! %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "plotlyfigure = getplotlyfig('bronsolo','165'); \n", "\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "% SAVE PLOTLY FIG! %\n", "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%\n", "\n", "\n", "filename = 'morse.png'; \n", "saveplotlyfig(plotlyfigure.data,plotlyfigure.layout,filename)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 226 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Boom! **morse.png** has been automatically saved to our working directory. Let's have a look. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Awesome! Do you notice how the above plot is no longer interactive? That's because it is a static PNG image, ready to be placed in your offline documents. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
\n", "
Example 6: saveplotlyfig.m
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a final example, let's grab a public plot from another Plotly user. This one is an awesome line plot from our very own **jackp**. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "show_plot('https://plot.ly/~jackp/671')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "" ] } ], "prompt_number": 30 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "First grab the data/style and layout. " ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab \n", "\n", "plotlyfig = getplotlyfig('jackp','671')" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "text": [ "\n", "plotlyfig = \n", "\n", " layout: [1x1 struct]\n", " data: {1x11 cell}\n", "\n" ] } ], "prompt_number": 44 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now feed the data/style and layout information into **saveplotlyfig.m**." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%%matlab\n", "filename = 'tax.png'; \n", "saveplotlyfig(plotlyfig.data,plotlyfig.layout,filename); " ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 45 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "Cool! Let's have a look at the image. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\"\"\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "All we have to do now is throw it into our economics report! " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", "     ** \u2022 **     ** \u2022 **     ** \u2022 **     ** \u2022 **     ** \u2022 **     \n", "

\n", "
\n", "
\n", "
\n", "
\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

CONTACT

" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "--- \n", "\n", "Want to help improve this notebook? Please send us your comments/questions! Feedback concerning this notebook can be directed to ** chuck [at] plot.ly **. You can also follow us online.
\n", "
\n", "\n", "
\n", "\n", "
\n", "\n", "\"\" \n", "\n", "
\n", "\n", "
\n", "\n", "\"\" \n", "\n", "
\n", "\n", "
\n", "\n", "\"\" \n", "\n", "
\n", "\n", "
\n", "\n", "\"\" \n", "\n", "
\n", "\n", "
\n", "
\n", "
\n", "\n", "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "

\n", "
\n", "** \u2022 **

\n", "** \u2022 **

\n", "** \u2022 **

\n", "** \u2022 **

\n", "
\n", "

\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

NOTEBOOK BEAUTIFICATION

" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# CSS styling within IPython notebook\n", "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open(\"./css/style_notebook.css\", \"r\").read()\n", " return HTML(styles)\n", "\n", "css_styling()" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n", "\n" ], "metadata": {}, "output_type": "pyout", "prompt_number": 237, "text": [ "" ] } ], "prompt_number": 237 }, { "cell_type": "markdown", "metadata": {}, "source": [ "
[STYLE INSPIRED BY CAM DAVIDSON'S NB'S - THANK YOU]
" ] } ], "metadata": {} } ] }