Last active
August 29, 2015 14:01
-
-
Save msund/0db4653b4b82240e580e to your computer and use it in GitHub Desktop.
Test Post
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"metadata": { | |
"name": "Reproducible figures" | |
}, | |
"nbformat": 3, | |
"nbformat_minor": 0, | |
"worksheets": [ | |
{ | |
"cells": [ | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "IPython and Plotly: A Rosetta Stone for MATLAB,<br>R, Python, and Excel plotting " | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Collaboration, data analysis, and data visualization sometimes feels like this:" | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "from IPython.display import Image\nImage(url = 'https://i.imgur.com/4DrMgLI.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"https://i.imgur.com/4DrMgLI.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 1, | |
"text": "<IPython.core.display.Image at 0x7f5ae5dbf9d0>" | |
} | |
], | |
"prompt_number": 1 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Graphing and data analysis need a Rosetta Stone to solve the fragmentation and collaboration problem. The Rosetta stone bridged a linguistic divide by showing the same text in Ancient Egyptian hieroglyphs, Demotic script, and Greek, allowing for translation and interoperability between languages.\n\nPlotly is all about interoperative, collaborative data analysis and plotting. You can import, edit, and plot data using scripts and data from Python, MATLAB, R, Julia, Perl, REST, Arduino, Raspberry Pi, or Excel. So can your team. *All in the same plot*.\n\nRead on to learn more, or run `$ pip install plotly` and copy and paste the code below." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "%matplotlib inline\nimport matplotlib.pyplot as plt # side-stepping mpl backend\nimport matplotlib.gridspec as gridspec # subplots\nimport numpy as np", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 2 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can use our key, or [sign-up](https://plot.ly/ssi) to get started. It's free for any public sharing and you own your data, so you can make and share as many plots as you want." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "import plotly.plotly as py\nimport plotly.tools as tls\nfrom plotly.graph_objs import *\npy.sign_in(\"IPython.Demo\", \"1fw3zw2o13\")", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 3 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "import plotly\nplotly.__version__", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 4, | |
"text": "'1.0.12'" | |
} | |
], | |
"prompt_number": 4 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "I. shareable matplotlib figures" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Let's start out with a matplotlib example. We also have [a Notebook](http://nbviewer.ipython.org/github/plotly/python-user-guide/blob/master/s6_matplotlylib/s6_matplotlylib.ipynb) on the subject." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "fig1 = plt.figure()\n\nimport matplotlib.pyplot as plt\nimport numpy as np\nimport matplotlib.mlab as mlab\n\nmean = [10,12,16,22,25]\nvariance = [3,6,8,10,12]\n\nx = np.linspace(0,40,1000)\n\nfor i in range(4):\n sigma = np.sqrt(variance[i])\n y = mlab.normpdf(x,mean[i],sigma)\n plt.plot(x,y, label=r'$v_{}$'.format(i+1))\n\nplt.xlabel(\"X\")\nplt.ylabel(\"P(X)\") ", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 5, | |
"text": "<matplotlib.text.Text at 0x7f5ad82b8050>" | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\nAABJRU5ErkJggg==\n", | |
"text": "<matplotlib.figure.Figure at 0x7f5ad857cf50>" | |
} | |
], | |
"prompt_number": 5 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "To re-create the graph in Plotly and use Plotly's defaults, call `iplot` and add `strip_style`." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "py.iplot_mpl(fig1, strip_style = True)", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~IPython.Demo/3801\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae5093c50>" | |
} | |
], | |
"prompt_number": 6 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "It's shareable at a URL, contains the data as part of the plot, and can be edited collaboratively with our web app. But that's just the tip of the iceburg. " | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "II. ggplot2 plots in Plotly" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Suppose you see a lovely graph on the [World Bank website](http://blogs.worldbank.org/opendata/accessing-world-bank-data-apis-python-r-ruby-stata). The graph uses [ggplot2](http://ggplot2.org), a remarkable plotting library for R. " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "from IPython.display import Image\nImage(url = 'http://i.imgur.com/PkRRmHq.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/PkRRmHq.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 7, | |
"text": "<IPython.core.display.Image at 0x7f5ae5141390>" | |
} | |
], | |
"prompt_number": 7 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We'll run the ggplot2 script in RStudio (or the new [R kernel](https://github.com/takluyver/IRkernel) for IPython). " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'https://i.imgur.com/PgcQSlk.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"https://i.imgur.com/PgcQSlk.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 8, | |
"text": "<IPython.core.display.Image at 0x7f5ae51410d0>" | |
} | |
], | |
"prompt_number": 8 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We can add `py$ggplotly` to the call, which will draw the figure with Plotly's [R API](plot.ly/r). Then we can call it in a Notebook." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('RgraphingAPI', '1457')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~RgraphingAPI/1457\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae5138190>" | |
} | |
], | |
"prompt_number": 9 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "The data is called from a WDI database. The call and don't contain the data, but the plot does. I forked the data and shared it: [plot.ly/~MattSundquist/1343](https://plot.ly/~MattSundquist/1343). " | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "If you want to use Plotly's default graph look, you can edit a *ggplot2 graph using Python*." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "fig = py.get_figure('RgraphingAPI', '1457')\nfig.strip_style()\npy.iplot(fig)", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~IPython.Demo/3802\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae4fe2bd0>" | |
} | |
], | |
"prompt_number": 10 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Plotly is also a workflow tool. You can quickly make graphs with matplotlib or Plotly to get a first glance at your data." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "my_data = py.get_figure('PythonAPI', '455').get_data()", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 11 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "%matplotlib inline\nimport matplotlib.pyplot as plt", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "fig1 = plt.figure()\n\nplt.subplot(311)\nplt.plot(my_data[0]['x'], my_data[0]['y'])\nplt.subplot(312)\nplt.plot(my_data[1]['x'], my_data[1]['y'])\nplt.subplot(313)\nplt.plot(my_data[2]['x'], my_data[2]['y'])\n\npy.iplot_mpl(fig1, strip_style = True)", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~IPython.Demo/3803\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae4ad1710>" | |
} | |
], | |
"prompt_number": 13 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can also draw the graph [with subplots](http://plot.ly/python/subplots/) in Plotly." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "my_data[1]['yaxis'] = 'y2'\nmy_data[2]['yaxis'] = 'y3'\n\nlayout = Layout(\n yaxis=YAxis(\n domain=[0, 0.33]\n ),\n legend=Legend(\n traceorder='reversed'\n ),\n yaxis2=YAxis(\n domain=[0.33, 0.66]\n ),\n yaxis3=YAxis(\n domain=[0.66, 1]\n )\n)\n\nfig = Figure(data=my_data, layout=layout)\n\npy.iplot(fig)", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~IPython.Demo/3804\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae4a07750>" | |
} | |
], | |
"prompt_number": 14 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Then maybe I want to edit it quickly with a GUI, without coding. I click through to the graph in the \"data and graph\" link, fork my own copy, and can switch between graph types, styling options, and more." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'http://i.imgur.com/rHP53Oz.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/rHP53Oz.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 15, | |
"text": "<IPython.core.display.Image at 0x7f5ae4fe2f90>" | |
} | |
], | |
"prompt_number": 15 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Now, having re-styled it, we can call the graph back into the NB, and if we want, get the figure information for the new, updated graph. The graphs below are meant to show the flexibility available to you in styling from the GUI." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('MattSundquist', '1404')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~MattSundquist/1404\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae49b4150>" | |
} | |
], | |
"prompt_number": 16 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('MattSundquist', '1339')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~MattSundquist/1339\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ae49b4150>" | |
} | |
], | |
"prompt_number": 17 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We can also get the data in a grid, and run stats, fits, functions, add error bars, and more." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'http://i.imgur.com/JJkNPJg.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/JJkNPJg.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 18, | |
"text": "<IPython.core.display.Image at 0x7f5ae4fe28d0>" | |
} | |
], | |
"prompt_number": 18 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "And there we have it. A reproducible figure, drawn with D3 that includes the plot, data, and plot structure. And you can easily call that figure or data as well. Check to see what URL it is by hoving on \"data and graph\" and then call that figure." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "ggplot = py.get_figure('MattSundquist', '1339') ", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 19 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "ggplot #print it", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 20, | |
"text": "{'data': [{'line': {'color': 'rgb(31, 119, 180)', 'width': 4},\n 'mode': 'lines',\n 'name': 'Chile',\n 'type': 'scatter',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n 600,\n 640,\n 660,\n 650,\n 740,\n 760,\n 770,\n 800,\n 860,\n 1020,\n 1110,\n 1320,\n 1620,\n 1120,\n 980,\n 1070,\n 1320,\n 1740,\n 2240,\n 2640,\n 2190,\n 1780,\n 1600,\n 1410,\n 1410,\n 1560,\n 1820,\n 2090,\n 2240,\n 2490,\n 3020,\n 3330,\n 3610,\n 4320,\n 4930,\n 5380,\n 5250,\n 4910,\n 4920,\n 4760,\n 4550,\n 4570,\n 5230,\n 6250,\n 7260,\n 8630,\n 10020,\n 9930,\n 10720,\n 12270,\n 14310]},\n {'line': {'color': 'rgb(255, 127, 14)', 'width': 4},\n 'mode': 'lines',\n 'name': 'Hungary',\n 'type': 'scatter',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n 540,\n 590,\n 670,\n 830,\n 1000,\n 1150,\n 1200,\n 1330,\n 1520,\n 1770,\n 2070,\n 2200,\n 2170,\n 2010,\n 1930,\n 1860,\n 2040,\n 2400,\n 2710,\n 2770,\n 2880,\n 2740,\n 3140,\n 3630,\n 4000,\n 4220,\n 4320,\n 4370,\n 4380,\n 4460,\n 4580,\n 4720,\n 5210,\n 6550,\n 8540,\n 10220,\n 11040,\n 11510,\n 12890,\n 12980,\n 12930,\n 12900,\n 12410]},\n {'line': {'color': 'rgb(44, 160, 44)', 'width': 4},\n 'mode': 'lines',\n 'name': 'Uruguay',\n 'type': 'scatter',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n 580,\n 610,\n 660,\n 680,\n 720,\n 640,\n 610,\n 670,\n 820,\n 850,\n 870,\n 1060,\n 1370,\n 1620,\n 1490,\n 1420,\n 1630,\n 2150,\n 2870,\n 3650,\n 3290,\n 2190,\n 1740,\n 1510,\n 1780,\n 2210,\n 2600,\n 2730,\n 2840,\n 3180,\n 3830,\n 4350,\n 5040,\n 5530,\n 6160,\n 6970,\n 7240,\n 7260,\n 7050,\n 6500,\n 5140,\n 4240,\n 4130,\n 4720,\n 5380,\n 6380,\n 7690,\n 8520,\n 10110,\n 11700,\n 13580]}],\n 'layout': {'annotations': [{'align': 'center',\n 'arrowcolor': '',\n 'arrowhead': 1,\n 'arrowsize': 1,\n 'arrowwidth': 0,\n 'ax': -10,\n 'ay': -28.335936546325684,\n 'bgcolor': 'rgba(0,0,0,0)',\n 'bordercolor': '',\n 'borderpad': 1,\n 'borderwidth': 1,\n 'font': {'color': '', 'family': '', 'size': 0},\n 'opacity': 1,\n 'showarrow': False,\n 'tag': '',\n 'text': 'Source: <a href=\"http://blogs.worldbank.org/opendata/accessing-world-bank-data-apis-python-r-ruby-stata\">World Bank</a>',\n 'x': 0.9880317848410782,\n 'xanchor': 'auto',\n 'xref': 'paper',\n 'y': 0.02994334820619583,\n 'yanchor': 'auto',\n 'yref': 'paper'}],\n 'autosize': True,\n 'bargap': 0.2,\n 'bargroupgap': 0,\n 'barmode': 'group',\n 'boxgap': 0.3,\n 'boxgroupgap': 0.3,\n 'boxmode': 'overlay',\n 'dragmode': 'zoom',\n 'font': {'color': 'rgb(67, 67, 67)',\n 'family': \"'Open sans', verdana, arial, sans-serif\",\n 'size': 12},\n 'height': 547,\n 'hidesources': False,\n 'hovermode': 'x',\n 'legend': {'bgcolor': '#fff',\n 'bordercolor': '#444',\n 'borderwidth': 0,\n 'font': {'color': '', 'family': '', 'size': 0},\n 'traceorder': 'normal',\n 'x': 1.02,\n 'xanchor': 'left',\n 'y': 0.5,\n 'yanchor': 'auto'},\n 'margin': {'autoexpand': True,\n 'b': 80,\n 'l': 80,\n 'pad': 0,\n 'r': 80,\n 't': 100},\n 'paper_bgcolor': '#fff',\n 'plot_bgcolor': 'rgba(245, 247, 247, 0.7)',\n 'separators': '.,',\n 'showlegend': True,\n 'title': 'GNI Per Capita ($USD Atlas Method)',\n 'titlefont': {'color': '', 'family': '', 'size': 0},\n 'width': 1304,\n 'xaxis': {'anchor': 'y',\n 'autorange': True,\n 'autotick': True,\n 'domain': [0, 1],\n 'dtick': 10,\n 'exponentformat': 'B',\n 'gridcolor': 'rgb(255, 255, 255)',\n 'gridwidth': 1,\n 'linecolor': '#444',\n 'linewidth': 1,\n 'mirror': False,\n 'nticks': 0,\n 'overlaying': False,\n 'position': 0,\n 'range': [1960, 2012],\n 'rangemode': 'normal',\n 'showexponent': 'all',\n 'showgrid': True,\n 'showline': False,\n 'showticklabels': True,\n 'tick0': 0,\n 'tickangle': 'auto',\n 'tickcolor': '#444',\n 'tickfont': {'color': '', 'family': '', 'size': 0},\n 'ticklen': 5,\n 'ticks': '',\n 'tickwidth': 1,\n 'title': 'year',\n 'titlefont': {'color': '', 'family': '', 'size': 0},\n 'type': 'linear',\n 'zeroline': False,\n 'zerolinecolor': '#444',\n 'zerolinewidth': 1},\n 'yaxis': {'anchor': 'x',\n 'autorange': True,\n 'autotick': True,\n 'domain': [0, 1],\n 'dtick': 'D1',\n 'exponentformat': 'B',\n 'gridcolor': 'rgb(255, 255, 255)',\n 'gridwidth': 1,\n 'linecolor': '#444',\n 'linewidth': 1,\n 'mirror': False,\n 'nticks': 0,\n 'overlaying': False,\n 'position': 0,\n 'range': [2.6533245446042573, 4.234708848978488],\n 'rangemode': 'normal',\n 'showexponent': 'all',\n 'showgrid': True,\n 'showline': False,\n 'showticklabels': True,\n 'tick0': 0,\n 'tickangle': 'auto',\n 'tickcolor': '#444',\n 'tickfont': {'color': '', 'family': '', 'size': 0},\n 'ticklen': 5,\n 'ticks': '',\n 'tickwidth': 1,\n 'title': 'NY.GNP.PCAP.CD',\n 'titlefont': {'color': '', 'family': '', 'size': 0},\n 'type': 'log',\n 'zeroline': False,\n 'zerolinecolor': '#444',\n 'zerolinewidth': 1}}}" | |
} | |
], | |
"prompt_number": 20 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Want to analyze the data or use it for another figure?" | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "ggplot_data = ggplot.get_data()", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 21 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "ggplot_data", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 22, | |
"text": "{'data': [{'name': 'Chile',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n 600,\n 640,\n 660,\n 650,\n 740,\n 760,\n 770,\n 800,\n 860,\n 1020,\n 1110,\n 1320,\n 1620,\n 1120,\n 980,\n 1070,\n 1320,\n 1740,\n 2240,\n 2640,\n 2190,\n 1780,\n 1600,\n 1410,\n 1410,\n 1560,\n 1820,\n 2090,\n 2240,\n 2490,\n 3020,\n 3330,\n 3610,\n 4320,\n 4930,\n 5380,\n 5250,\n 4910,\n 4920,\n 4760,\n 4550,\n 4570,\n 5230,\n 6250,\n 7260,\n 8630,\n 10020,\n 9930,\n 10720,\n 12270,\n 14310]},\n {'name': 'Hungary',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n None,\n 540,\n 590,\n 670,\n 830,\n 1000,\n 1150,\n 1200,\n 1330,\n 1520,\n 1770,\n 2070,\n 2200,\n 2170,\n 2010,\n 1930,\n 1860,\n 2040,\n 2400,\n 2710,\n 2770,\n 2880,\n 2740,\n 3140,\n 3630,\n 4000,\n 4220,\n 4320,\n 4370,\n 4380,\n 4460,\n 4580,\n 4720,\n 5210,\n 6550,\n 8540,\n 10220,\n 11040,\n 11510,\n 12890,\n 12980,\n 12930,\n 12900,\n 12410]},\n {'name': 'Uruguay',\n 'x': [1960,\n 1961,\n 1962,\n 1963,\n 1964,\n 1965,\n 1966,\n 1967,\n 1968,\n 1969,\n 1970,\n 1971,\n 1972,\n 1973,\n 1974,\n 1975,\n 1976,\n 1977,\n 1978,\n 1979,\n 1980,\n 1981,\n 1982,\n 1983,\n 1984,\n 1985,\n 1986,\n 1987,\n 1988,\n 1989,\n 1990,\n 1991,\n 1992,\n 1993,\n 1994,\n 1995,\n 1996,\n 1997,\n 1998,\n 1999,\n 2000,\n 2001,\n 2002,\n 2003,\n 2004,\n 2005,\n 2006,\n 2007,\n 2008,\n 2009,\n 2010,\n 2011,\n 2012],\n 'y': [None,\n None,\n 580,\n 610,\n 660,\n 680,\n 720,\n 640,\n 610,\n 670,\n 820,\n 850,\n 870,\n 1060,\n 1370,\n 1620,\n 1490,\n 1420,\n 1630,\n 2150,\n 2870,\n 3650,\n 3290,\n 2190,\n 1740,\n 1510,\n 1780,\n 2210,\n 2600,\n 2730,\n 2840,\n 3180,\n 3830,\n 4350,\n 5040,\n 5530,\n 6160,\n 6970,\n 7240,\n 7260,\n 7050,\n 6500,\n 5140,\n 4240,\n 4130,\n 4720,\n 5380,\n 6380,\n 7690,\n 8520,\n 10110,\n 11700,\n 13580]}],\n 'layout': [{}]}" | |
} | |
], | |
"prompt_number": 22 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Want to use Python to analyze your data? You can read that data into a pandas DataFrame. " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "import pandas as pd", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 23 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "my_data = py.get_figure('MattSundquist', '1339').get_data()\nframes = {data['name']: {'x': data['x'], 'y': data['y']} for data in my_data['data']}\ndf = pd.DataFrame(frames)\ndf", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<div style=\"max-height:1000px;max-width:1500px;overflow:auto;\">\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>Chile</th>\n <th>Hungary</th>\n <th>Uruguay</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>x</th>\n <td> [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196...</td>\n <td> [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196...</td>\n <td> [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196...</td>\n </tr>\n <tr>\n <th>y</th>\n <td> [None, None, 600, 640, 660, 650, 740, 760, 770...</td>\n <td> [None, None, None, None, None, None, None, Non...</td>\n <td> [None, None, 580, 610, 660, 680, 720, 640, 610...</td>\n </tr>\n </tbody>\n</table>\n<p>2 rows \u00d7 3 columns</p>\n</div>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 24, | |
"text": " Chile \\\nx [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196... \ny [None, None, 600, 640, 660, 650, 740, 760, 770... \n\n Hungary \\\nx [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196... \ny [None, None, None, None, None, None, None, Non... \n\n Uruguay \nx [1960, 1961, 1962, 1963, 1964, 1965, 1966, 196... \ny [None, None, 580, 610, 660, 680, 720, 640, 610... \n\n[2 rows x 3 columns]" | |
} | |
], | |
"prompt_number": 24 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Plotly has interactive support that lets you call help on graph objects. Try `layout` or `data` too. For example." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "from plotly.graph_objs import Data, Layout, Figure", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 25 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "help(Figure)", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"stream": "stdout", | |
"text": "Help on class Figure in module plotly.graph_objs.graph_objs:\n\nclass Figure(PlotlyDict)\n | A dictionary-like object representing a figure to be rendered in plotly.\n | \n | This is the container for all things to be rendered in a figure.\n | \n | For help with setting up subplots, run:\n | `help(plotly.tools.get_subplots)`\n | \n | \n | Quick method reference:\n | \n | Figure.update(changes)\n | Figure.strip_style()\n | Figure.get_data()\n | Figure.to_graph_objs()\n | Figure.validate()\n | Figure.to_string()\n | Figure.force_clean()\n | \n | Valid keys:\n | \n | data [required=False] (value=Data object | dictionary-like):\n | A list-like array of the data that is to be visualized.\n | \n | For more, run `help(plotly.graph_objs.Data)`\n | \n | layout [required=False] (value=Layout object | dictionary-like):\n | The layout dictionary-like object contains axes information, gobal\n | settings, and layout information related to the rendering of the\n | figure.\n | \n | For more, run `help(plotly.graph_objs.Layout)`\n | \n | Method resolution order:\n | Figure\n | PlotlyDict\n | __builtin__.dict\n | __builtin__.object\n | \n | Methods defined here:\n | \n | __init__(self, *args, **kwargs)\n | \n | ----------------------------------------------------------------------\n | Methods inherited from PlotlyDict:\n | \n | force_clean(self)\n | Attempts to convert to graph_objs and call force_clean() on values.\n | \n | Calling force_clean() on a PlotlyDict will ensure that the object is\n | valid and may be sent to plotly. This process will also remove any\n | entries that end up with a length == 0.\n | \n | Careful! This will delete any invalid entries *silently*.\n | \n | get_data(self)\n | Returns the JSON for the plot with non-data elements stripped.\n | \n | strip_style(self)\n | Strip style from the current representation.\n | \n | All PlotlyDicts and PlotlyLists are guaranteed to survive the\n | stripping process, though they made be left empty. This is allowable.\n | \n | Keys that will be stripped in this process are tagged with\n | `'type': 'style'` in the INFO dictionary listed in graph_objs_meta.py.\n | \n | This process first attempts to convert nested collections from dicts\n | or lists to subclasses of PlotlyList/PlotlyDict. This process forces\n | a validation, which may throw exceptions.\n | \n | Then, each of these objects call `strip_style` on themselves and so\n | on, recursively until the entire structure has been validated and\n | stripped.\n | \n | to_graph_objs(self)\n | Walk obj, convert dicts and lists to plotly graph objs.\n | \n | For each key in the object, if it corresponds to a special key that\n | should be associated with a graph object, the ordinary dict or list\n | will be reinitialized as a special PlotlyDict or PlotlyList of the\n | appropriate `kind`.\n | \n | to_string(self, level=0, indent=4, eol='\\n', pretty=True, max_chars=80)\n | Returns a formatted string showing graph_obj constructors.\n | \n | Example:\n | \n | print obj.to_string()\n | \n | Keyword arguments:\n | level (default = 0) -- set number of indentations to start with\n | indent (default = 4) -- set indentation amount\n | eol (default = '\n | ') -- set end of line character(s)\n | pretty (default = True) -- curtail long list output with a '...'\n | max_chars (default = 80) -- set max characters per line\n | \n | update(self, dict1=None, **dict2)\n | Update current dict with dict1 and then dict2.\n | \n | This recursively updates the structure of the original dictionary-like\n | object with the new entries in the second and third objects. This\n | allows users to update with large, nested structures.\n | \n | Note, because the dict2 packs up all the keyword arguments, you can\n | specify the changes as a list of keyword agruments.\n | \n | Examples:\n | # update with dict\n | obj = Layout(title='my title', xaxis=XAxis(range=[0,1], domain=[0,1]))\n | update_dict = dict(title='new title', xaxis=dict(domain=[0,.8]))\n | obj.update(update_dict)\n | obj\n | {'title': 'new title', 'xaxis': {'range': [0,1], 'domain': [0,.8]}}\n | \n | # update with list of keyword arguments\n | obj = Layout(title='my title', xaxis=XAxis(range=[0,1], domain=[0,1]))\n | obj.update(title='new title', xaxis=dict(domain=[0,.8]))\n | obj\n | {'title': 'new title', 'xaxis': {'range': [0,1], 'domain': [0,.8]}}\n | \n | This 'fully' supports duck-typing in that the call signature is\n | identical, however this differs slightly from the normal update\n | method provided by Python's dictionaries.\n | \n | validate(self)\n | Recursively check the validity of the keys in a PlotlyDict.\n | \n | The valid keys constitute the entries in each object\n | dictionary in INFO stored in graph_objs_meta.py.\n | \n | The validation process first requires that all nested collections be\n | converted to the appropriate subclass of PlotlyDict/PlotlyList. Then,\n | each of these objects call `validate` and so on, recursively,\n | until the entire object has been validated.\n | \n | ----------------------------------------------------------------------\n | Data descriptors inherited from PlotlyDict:\n | \n | __dict__\n | dictionary for instance variables (if defined)\n | \n | __weakref__\n | list of weak references to the object (if defined)\n | \n | ----------------------------------------------------------------------\n | Data and other attributes inherited from PlotlyDict:\n | \n | __metaclass__ = <class 'plotly.graph_objs.graph_objs.DictMeta'>\n | A meta class for PlotlyDict class creation.\n | \n | The sole purpose of this meta class is to properly create the __doc__\n | attribute so that running help(Obj), where Obj is a subclass of PlotlyDict,\n | will return information about key-value pairs for that object.\n | \n | ----------------------------------------------------------------------\n | Methods inherited from __builtin__.dict:\n | \n | __cmp__(...)\n | x.__cmp__(y) <==> cmp(x,y)\n | \n | __contains__(...)\n | D.__contains__(k) -> True if D has a key k, else False\n | \n | __delitem__(...)\n | x.__delitem__(y) <==> del x[y]\n | \n | __eq__(...)\n | x.__eq__(y) <==> x==y\n | \n | __ge__(...)\n | x.__ge__(y) <==> x>=y\n | \n | __getattribute__(...)\n | x.__getattribute__('name') <==> x.name\n | \n | __getitem__(...)\n | x.__getitem__(y) <==> x[y]\n | \n | __gt__(...)\n | x.__gt__(y) <==> x>y\n | \n | __iter__(...)\n | x.__iter__() <==> iter(x)\n | \n | __le__(...)\n | x.__le__(y) <==> x<=y\n | \n | __len__(...)\n | x.__len__() <==> len(x)\n | \n | __lt__(...)\n | x.__lt__(y) <==> x<y\n | \n | __ne__(...)\n | x.__ne__(y) <==> x!=y\n | \n | __repr__(...)\n | x.__repr__() <==> repr(x)\n | \n | __setitem__(...)\n | x.__setitem__(i, y) <==> x[i]=y\n | \n | __sizeof__(...)\n | D.__sizeof__() -> size of D in memory, in bytes\n | \n | clear(...)\n | D.clear() -> None. Remove all items from D.\n | \n | copy(...)\n | D.copy() -> a shallow copy of D\n | \n | fromkeys(...)\n | dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v.\n | v defaults to None.\n | \n | get(...)\n | D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.\n | \n | has_key(...)\n | D.has_key(k) -> True if D has a key k, else False\n | \n | items(...)\n | D.items() -> list of D's (key, value) pairs, as 2-tuples\n | \n | iteritems(...)\n | D.iteritems() -> an iterator over the (key, value) items of D\n | \n | iterkeys(...)\n | D.iterkeys() -> an iterator over the keys of D\n | \n | itervalues(...)\n | D.itervalues() -> an iterator over the values of D\n | \n | keys(...)\n | D.keys() -> list of D's keys\n | \n | pop(...)\n | D.pop(k[,d]) -> v, remove specified key and return the corresponding value.\n | If key is not found, d is returned if given, otherwise KeyError is raised\n | \n | popitem(...)\n | D.popitem() -> (k, v), remove and return some (key, value) pair as a\n | 2-tuple; but raise KeyError if D is empty.\n | \n | setdefault(...)\n | D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D\n | \n | values(...)\n | D.values() -> list of D's values\n | \n | viewitems(...)\n | D.viewitems() -> a set-like object providing a view on D's items\n | \n | viewkeys(...)\n | D.viewkeys() -> a set-like object providing a view on D's keys\n | \n | viewvalues(...)\n | D.viewvalues() -> an object providing a view on D's values\n | \n | ----------------------------------------------------------------------\n | Data and other attributes inherited from __builtin__.dict:\n | \n | __hash__ = None\n | \n | __new__ = <built-in method __new__ of type object>\n | T.__new__(S, ...) -> a new object with type S, a subtype of T\n\n" | |
} | |
], | |
"prompt_number": 26 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "III. MATLAB, Julia, and Perl plotting with Plotly" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We just made a plot with R using `ggplot2`, edited it in an IPython Notebook with Python, edited with our web app, shared it, and read the data into a pandas DataFrame. We have [another Notebook](nbviewer.ipython.org/gist/msund/11349097) that shows how to use Plotly with [seaborn](stanford.edu/~mwaskom/software/seaborn/tutorial.html), [prettyplotlib](https://github.com/olgabot/prettyplotlib), and [ggplot for Python](http://ggplot.yhathq.com/) Your whole team can now collaborate, regardless of technical capability or language of choice. This linguistic flexibility and technical interoperability powers collaboration, and it's what Plotly is all about. Let's jump into a few more examples." | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Let's say you see some code and data for a [MATLAB gallery](http://www.mathworks.com/matlabcentral/fileexchange/35265-matlab-plot-gallery-log-log-plot/content/html/Loglog_Plot.html) plot you love and want to share." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'http://i.imgur.com/bGj8EzI.png?1')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/bGj8EzI.png?1\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 27, | |
"text": "<IPython.core.display.Image at 0x7f5afeeeec10>" | |
} | |
], | |
"prompt_number": 27 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can use Plotly's [MATLAB API](plot.ly/MATLAB) as shown in [this Notebook](http://nbviewer.ipython.org/github/plotly/IPython-plotly/blob/master/See%20more/MATLAB_Wrapper_Examples.ipynb) to make a shareable version, with LaTeX included. You run the MATLAB code in your MATLAB environrment or the [MATLAB kernel](https://github.com/ipython/ipython/wiki/Extensions-Index#matlab) in IPython and add `fig2plotly` to the call. And we get:" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": [ | |
"EXAMPLE 3: Gain vs Frequency" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": [ | |
"%%matlab\n", | |
"\n", | |
"close all\n", | |
"\n", | |
"% Create a set of values for the damping factor\n", | |
"zeta = [0.01 .02 0.05 0.1 .2 .5 1 ];\n", | |
"\n", | |
"% Define a color for each damping factor\n", | |
"colors = ['r' 'g' 'b' 'c' 'm' 'y' 'k'];\n", | |
"\n", | |
"% Create a range of frequency values equally spaced logarithmically\n", | |
"w = logspace(-1, 1, 1000);\n", | |
"\n", | |
"% Plot the gain vs. frequency for each of the seven damping factors\n", | |
"figure;\n", | |
"for i = 1:7\n", | |
" a = w.^2 - 1;\n", | |
" b = 2*w*zeta(i);\n", | |
" gain = sqrt(1./(a.^2 + b.^2));\n", | |
" loglog(w, gain, 'color', colors(i), 'linewidth', 2);\n", | |
" hold on;\n", | |
"end\n", | |
"\n", | |
"% Set the axis limits\n", | |
"axis([0.1 10 0.01 100]);\n", | |
"\n", | |
"% Add a title and axis labels\n", | |
"title('Gain vs Frequency');\n", | |
"xlabel('Frequency');\n", | |
"ylabel('Gain');\n", | |
"\n", | |
"% Turn the grid on\n", | |
"grid on;\n", | |
"\n", | |
"% ----------------------------------------\n", | |
"% Let's convert the figure to plotly structures, and set stripping to false\n", | |
"[data, layout] = convertFigure(get(gcf), false);\n", | |
"\n", | |
"% But, before we publish, let's modify and add some features:\n", | |
"% Naming the traces\n", | |
"for i=1:numel(data)\n", | |
" data{i}.name = ['$\\\\zeta = ' num2str(zeta(i)) '$']; %LATEX FORMATTING\n", | |
" data{i}.showlegend = true;\n", | |
"end\n", | |
"% Adding a nice the legend\n", | |
"legendstyle = struct( ...\n", | |
" 'x' , 0.15, ...\n", | |
" 'y' , 0.9, ...\n", | |
" 'bgcolor' , '#E2E2E2', ...\n", | |
" 'bordercolor' , '#FFFFFF', ...\n", | |
" 'borderwidth' , 2, ...\n", | |
" 'traceorder' , 'normal' ...\n", | |
" );\n", | |
"layout.legend = legendstyle;\n", | |
"layout.showlegend = true;\n", | |
"\n", | |
"% Setting the hover mode\n", | |
"layout.hovermode = 'closest';\n", | |
"\n", | |
"% Giving the plot a custom name\n", | |
"plot_name = 'My_improved_plot';\n", | |
"\n", | |
"% Sending to Plotly\n", | |
"response = plotly(data, struct('layout', layout, ...\n", | |
" 'filename',plot_name, ...\n", | |
"\t'fileopt', 'overwrite'));\n", | |
"\n", | |
"display(response.url)" | |
], | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": [ | |
"https://plot.ly/~MATLAB-demos/4\r\n" | |
] | |
}, | |
{ | |
"metadata": {}, | |
"output_type": "display_data", | |
"png": "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\n" | |
} | |
], | |
"prompt_number": 12 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('MATLAB-Demos', '4')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~MATLAB-Demos/4\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cc50>" | |
} | |
], | |
"prompt_number": 28 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "And you can similary collaborate across all Plotly APIs, working on plots from [IJulia](http://nbviewer.ipython.org/github/plotly/IPython-plotly/blob/master/See%20more/IJulia%20-%20Multiple%20Axes%2C%20Subplots%20and%20Insets.ipynb), Perl, Arduino, Raspberry Pi, or Ruby. You could also append data to any figure from any API, or from the GUI. Want to make your own wrapper? Check out our [REST API](http://plot.ly/rest/). " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('bpostlethwaiteb', '26') #An IJulia graph", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~bpostlethwaiteb/26\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad857ce50>" | |
} | |
], | |
"prompt_number": 29 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "This graph was made with Perl ([code here](https://github.com/plotly/User-Projects/tree/master/mandelbrot))." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('karasik.dmitry', '2')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~karasik.dmitry/2\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cb10>" | |
} | |
], | |
"prompt_number": 30 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Head over to [Plotly's API](plot.ly/api) to see more, and check out our [User Guide](http://nbviewer.ipython.org/github/plotly/python-user-guide/blob/master/s00_homepage/s00_homepage.ipynb#Installation-guidelines) to see how it all works. " | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "IV. WebPlotDigitizer and Plotly" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Let's suppose next that you wanted to plot data from a graph you loved in a [Facebook Data Science post](https://www.facebook.com/notes/facebook-data-science/mothers-day-2014/10152235539518859). " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'https://i.imgur.com/sAHsjk3.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"https://i.imgur.com/sAHsjk3.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 31, | |
"text": "<IPython.core.display.Image at 0x7f5ad857ca90>" | |
} | |
], | |
"prompt_number": 31 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can take a screenshot, and drag and drop the image into [WebPlotDigitizer](http://arohatgi.info/WebPlotDigitizer/app/). Here's [a tutorial](http://blog.plot.ly/post/70293893434/automatically-grab-data-from-an-image-with) on using the helpful tool, which includes the handy [\"Graph in Plotly\"](https://plot.ly/export/) button. You can put it on your website so your users can easily access, graph, and share your data. And it links to your source." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image (url = 'https://i.imgur.com/y4t5hdj.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"https://i.imgur.com/y4t5hdj.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 32, | |
"text": "<IPython.core.display.Image at 0x7f5ad857ce10>" | |
} | |
], | |
"prompt_number": 32 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "I can then make and share the graph in Plotly. You could do this to access data in any images you find online, then add fits or data from the grid or APIs. Check out [our post with five fits](http://blog.plot.ly/post/84309369787/best-fit-lines-in-plotly) to see more." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image (url = 'http://i.imgur.com/BUOe85E.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/BUOe85E.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 33, | |
"text": "<IPython.core.display.Image at 0x7f5ad857ccd0>" | |
} | |
], | |
"prompt_number": 33 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We'll add a fit then style it a bit." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('MattSundquist', '1337')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~MattSundquist/1337\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cb10>" | |
} | |
], | |
"prompt_number": 34 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "V. Revisions, embedding, and sharing" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We can share it to edit collaboratively, privately or publicly. I can share straight [into a folder](http://plot.ly/python/file-sharing) from the API. My collaborators and I can always [add, append, or extend data](http://plot.ly/python/add-append-extend) to that same plot with Python, R, or the GUI. " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'http://i.imgur.com/YRyTCQy.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/YRyTCQy.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 35, | |
"text": "<IPython.core.display.Image at 0x7f5ae4a07150>" | |
} | |
], | |
"prompt_number": 35 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "We can also save revisions and versions. " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image (url = 'http://i.imgur.com/ATn7vE4.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/ATn7vE4.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 36, | |
"text": "<IPython.core.display.Image at 0x7f5ad857cc10>" | |
} | |
], | |
"prompt_number": 36 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can also stop emailing files around. Have your discussion in context in Plotly. The graph being discussed is [here](https://plot.ly/~etpinard/25/average-daily-surface-air-temperature-anomalies-in-deg-c-from-2013-12-01-to-2014/)." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url = 'http://i.imgur.com/OqXKs0r.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"http://i.imgur.com/OqXKs0r.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 37, | |
"text": "<IPython.core.display.Image at 0x7f5ad857c950>" | |
} | |
], | |
"prompt_number": 37 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "And displaying in your browser in an iframe is easy. You can copy and paste the snippet below and put it in a blog or website and get a live, interactive graph that lets your readers zoom, toggle, and get text on the hover." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "from IPython.display import HTML", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 38 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "i = \"\"\"<pre style=\"background:#f1f1f1;color:#000\"><iframe src=<span style=\"color:#c03030\">\"https://plot.ly/~MattSundquist/1334/650/550\"</span> width=<span style=\"color:#c03030\">\"650\"</span> height=550<span style=\"color:#c03030\">\" frameBorder=\"</span>0<span style=\"color:#c03030\">\" seamless=\"</span>seamless<span style=\"color:#c03030\">\" scrolling=\"</span>no<span style=\"color:#c03030\">\"></iframe>\n</span></pre>\"\"\"", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [], | |
"prompt_number": 39 | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "h = HTML(i); h", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<pre style=\"background:#f1f1f1;color:#000\"><iframe src=<span style=\"color:#c03030\">\"https://plot.ly/~MattSundquist/1334/650/550\"</span> width=<span style=\"color:#c03030\">\"650\"</span> height=550<span style=\"color:#c03030\">\" frameBorder=\"</span>0<span style=\"color:#c03030\">\" seamless=\"</span>seamless<span style=\"color:#c03030\">\" scrolling=\"</span>no<span style=\"color:#c03030\">\"></iframe>\n</span></pre>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 40, | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cad0>" | |
} | |
], | |
"prompt_number": 40 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "It's also interactive, even when embedded." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "HTML('<br><center><iframe class=\"vine-embed\" src=\"https://vine.co/v/Mvzin6HZzLB/embed/simple\" width=\"600\" height=\"600\" frameborder=\"0\"></iframe><script async src=\"//platform.vine.co/static/scripts/embed.js\" charset=\"utf-8\"></script></center><br>')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<br><center><iframe class=\"vine-embed\" src=\"https://vine.co/v/Mvzin6HZzLB/embed/simple\" width=\"600\" height=\"600\" frameborder=\"0\"></iframe><script async src=\"//platform.vine.co/static/scripts/embed.js\" charset=\"utf-8\"></script></center><br>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 41, | |
"text": "<IPython.core.display.HTML at 0x7f5ad857ce90>" | |
} | |
], | |
"prompt_number": 41 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Your profile keeps all your graphs and data together like this https://plot.ly/~jackp/. " | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "Image(url='https://i.imgur.com/gUC4ajR.png')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<img src=\"https://i.imgur.com/gUC4ajR.png\"/>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 42, | |
"text": "<IPython.core.display.Image at 0x7f5ad857cb90>" | |
} | |
], | |
"prompt_number": 42 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Plotly also does content. Check out our's posts on [boxplots](https://plotly/boxplots) or [histograms](https://plot.ly/histograms)." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "HTML('<center><iframe class=\"vine-embed\" src=\"https://vine.co/v/M6JBhdiqPqA/embed/simple\" width=\"600\" height=\"600\" frameborder=\"0\"></iframe><script async src=\"//platform.vine.co/static/scripts/embed.js\" charset=\"utf-8\"></script></center>')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<center><iframe class=\"vine-embed\" src=\"https://vine.co/v/M6JBhdiqPqA/embed/simple\" width=\"600\" height=\"600\" frameborder=\"0\"></iframe><script async src=\"//platform.vine.co/static/scripts/embed.js\" charset=\"utf-8\"></script></center>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 43, | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cd90>" | |
} | |
], | |
"prompt_number": 43 | |
}, | |
{ | |
"cell_type": "heading", | |
"level": 2, | |
"metadata": {}, | |
"source": "VI. Streaming Graphs" | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can stream data into Plotly. That means you could publish your results to anyone in the world by streaming it through Plotly. You could also send data from multiple sources and languages, and keep your data around to analyze and publish it." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('flann321', '9')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~flann321/9\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad82fd790>" | |
} | |
], | |
"prompt_number": 44 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Or you can even stream in real-time. Check out a [Notebook here](http://nbviewer.ipython.org/github/plotly/python-user-guide/blob/master/s7_streaming/s7_streaming.ipynb) or see our [Raspberry Pi Instructable](http://www.instructables.com/id/Plotly-Atlas-Scientific-Graph-Real-Time-Dissolved-/) showing real-time dissolved oxygen." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "tls.embed('streaming-demos','4')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~streaming-demos/4\" height=\"525\" width=\"100%\"></iframe>", | |
"metadata": {}, | |
"output_type": "display_data", | |
"text": "<IPython.core.display.HTML at 0x7f5ad82fd950>" | |
} | |
], | |
"prompt_number": 45 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "You can stream from basically anywhere." | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "HTML('<center><iframe src=\"//instagram.com/p/nJkMMQRyvS/embed/\" width=\"612\" height=\"710\" frameborder=\"0\" scrolling=\"no\" allowtransparency=\"true\"></iframe></center>')", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<center><iframe src=\"//instagram.com/p/nJkMMQRyvS/embed/\" width=\"612\" height=\"710\" frameborder=\"0\" scrolling=\"no\" allowtransparency=\"true\"></iframe></center>", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 46, | |
"text": "<IPython.core.display.HTML at 0x7f5ad857cf10>" | |
} | |
], | |
"prompt_number": 46 | |
}, | |
{ | |
"cell_type": "markdown", | |
"metadata": {}, | |
"source": "Suggestions or comments? Email [email protected] or find us at [@plotlygraphs](twitter.com/plotlygraphs). Happy plotting!" | |
}, | |
{ | |
"cell_type": "code", | |
"collapsed": false, | |
"input": "# CSS styling within IPython notebook\nfrom IPython.core.display import HTML\nimport urllib2\ndef css_styling():\n url = 'https://raw.githubusercontent.com/plotly/python-user-guide/master/custom.css'\n styles = urllib2.urlopen(url).read()\n return HTML(styles)\n\ncss_styling()", | |
"language": "python", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"html": "<style>\n /*body {\n background-color: #F5F5F5;\n }*/\n div.cell{\n width: 850px;\n margin-left: 10% !important;\n margin-right: auto;\n }\n h1 {\n font-family: \"Open sans\",verdana,arial,sans-serif;\n }\n .text_cell_render h1 {\n font-weight: 200;\n font-size: 40pt;\n line-height: 100%;\n color:#447adb;\n margin-bottom: 0em;\n margin-top: 0em;\n display: block;\n white-space: nowrap;\n } \n h2 {\n font-family: \"Open sans\",verdana,arial,sans-serif;\n text-indent:1em;\n }\n .text_cell_render h2 {\n font-weight: 200;\n font-size: 20pt;\n font-style: italic;\n line-height: 100%;\n color:#447adb;\n margin-bottom: 1.5em;\n margin-top: 0.5em;\n display: block;\n white-space: nowrap;\n } \n h3 {\n font-family: \"Open sans\",verdana,arial,sans-serif;\n }\n .text_cell_render h3 {\n font-weight: 300;\n font-size: 18pt;\n line-height: 100%;\n color:#447adb;\n margin-bottom: 0.5em;\n margin-top: 2em;\n display: block;\n white-space: nowrap;\n }\n h4 {\n font-family: \"Open sans\",verdana,arial,sans-serif;\n }\n .text_cell_render h4 {\n font-weight: 300;\n font-size: 16pt;\n color:#447adb;\n margin-bottom: 0.5em;\n margin-top: 0.5em;\n display: block;\n white-space: nowrap;\n }\n h5 {\n font-family: \"Open sans\",verdana,arial,sans-serif;\n }\n .text_cell_render h5 {\n font-weight: 300;\n font-style: normal;\n color: #1d3b84;\n font-size: 16pt;\n margin-bottom: 0em;\n margin-top: 1.5em;\n display: block;\n white-space: nowrap;\n }\n div.text_cell_render{\n font-family: \"Open sans\",verdana,arial,sans-serif;\n line-height: 135%;\n font-size: 125%;\n width:750px;\n margin-left:auto;\n margin-right:auto;\n text-align:justify;\n text-justify:inter-word;\n }\n div.output_subarea.output_text.output_pyout {\n overflow-x: auto;\n overflow-y: scroll;\n max-height: 300px;\n }\n div.output_subarea.output_stream.output_stdout.output_text {\n overflow-x: auto;\n overflow-y: scroll;\n max-height: 300px;\n }\n code{\n font-size: 78%;\n }\n .rendered_html code{\n background-color: transparent;\n }\n ul{\n /* color:#447adb; */ // colors text too\n margin: 2em;\n }\n ul li{\n padding-left: 0.5em; \n margin-bottom: 0.5em; \n margin-top: 0.5em; \n }\n ul li li{\n padding-left: 0.2em; \n margin-bottom: 0.2em; \n margin-top: 0.2em; \n }\n ol{\n /* color:#447adb; */ // colors text too\n margin: 2em;\n }\n ol li{\n padding-left: 0.5em; \n margin-bottom: 0.5em; \n margin-top: 0.5em; \n }\n /*.prompt{\n display: None;\n } */\n ul li{\n padding-left: 0.5em; \n margin-bottom: 0.5em; \n margin-top: 0.2em; \n }\n a:link{\n font-weight: bold;\n color:#447adb;\n }\n a:visited{\n font-weight: bold;\n color: #1d3b84;\n }\n a:hover{\n font-weight: bold;\n color: #1d3b84;\n }\n a:focus{\n font-weight: bold;\n color:#447adb;\n }\n a:active{\n font-weight: bold;\n color:#447adb;\n }\n .rendered_html :link {\n text-decoration: none; \n }\n .rendered_html :hover {\n text-decoration: none; \n }\n .rendered_html :visited {\n text-decoration: none;\n }\n .rendered_html :focus {\n text-decoration: none;\n }\n .rendered_html :active {\n text-decoration: none;\n }\n .warning{\n color: rgb( 240, 20, 20 )\n } \n hr {\n color: #f3f3f3;\n background-color: #f3f3f3;\n height: 1px;\n }\n blockquote{\n display:block;\n background: #f3f3f3;\n font-family: \"Open sans\",verdana,arial,sans-serif;\n width:610px;\n padding: 15px 15px 15px 15px;\n text-align:justify;\n text-justify:inter-word;\n }\n blockquote p {\n margin-bottom: 0;\n line-height: 125%;\n font-size: 100%;\n }\n /* element.style {\n } */ \n</style>\n<script>\n MathJax.Hub.Config({\n TeX: {\n extensions: [\"AMSmath.js\"]\n },\n tex2jax: {\n inlineMath: [ [\"$\",\"$\"], [\"\\\\(\",\"\\\\)\"] ],\n displayMath: [ [\"$$\",\"$$\"], [\"\\\\[\",\"\\\\]\"] ]\n },\n displayAlign: \"center\", // Change this to \"center\" to center equations.\n \"HTML-CSS\": {\n styles: {\".MathJax_Display\": {\"margin\": 4}}\n }\n });\n</script>\n", | |
"metadata": {}, | |
"output_type": "pyout", | |
"prompt_number": 47, | |
"text": "<IPython.core.display.HTML at 0x7f5ad82fde50>" | |
} | |
], | |
"prompt_number": 47 | |
} | |
], | |
"metadata": {} | |
} | |
] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment