Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
LaTeX draft
This file has been truncated, but you can view the full file.
{
"metadata": {
"name": "Untitled0"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": "$LaTeX$ PLots with <br>MATLAB, Python, R, and a GUI"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "[Plotly](https://plot.ly) is an online graphing and analytics project. It's like a GitHub for data and graphs. The goal is: collaboratively make beautiful, interactive plots, 3D plots, and streaming graphs. It's all in your browser, for free, and without downloads or software installations. \n\nSupporting scientific plotting and collaboration is key to Plotly's mission. You can use $LaTeX$ from any language and a GUI. Starting with Plotly's matplotlib support we'll make an example. For more, head over to our [APIs](https://plot.ly/api):\n\n<a href=\"http://imgur.com/VHU2X3x\"><img src=\"http://i.imgur.com/VHU2X3x.png\" title=\"Hosted by imgur.com\"/></a>"
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": "I. $LaTeX$ and matplotlib"
},
{
"cell_type": "markdown",
"metadata": {},
"source": "You can follow along by copy and pasting this code right into your termainal. Before getting started, run `$ pip install plotly`, and if that didn't work, try `$ sudo pip install plotly`. I always feel like a boss installing with sudo. "
},
{
"cell_type": "code",
"collapsed": false,
"input": "import plotly\nplotly.__version__",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 1,
"text": "'1.0.12'"
}
],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": "You can use Plotly's public account and keys or [sign-up](https://plot.ly/ssu) for free."
},
{
"cell_type": "code",
"collapsed": false,
"input": "import matplotlib.pyplot as plt # side-stepping mpl's backend\nimport plotly.plotly as py\nimport plotly.tools as tls\nfrom plotly.graph_objs import *\n%matplotlib inline\npy.sign_in(\"IPython.Demo\", \"1fw3zw2o13\")",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Here is our first matplotlib figure. "
},
{
"cell_type": "code",
"collapsed": false,
"input": "fig1 = plt.figure()\n\nimport matplotlib.pyplot as plt\nimport numpy as np\n\nx = np.linspace(-2.0, 2.0, 10000) # The x-values\nsigma = np.linspace(0.4, 1.0, 4) # Some different values of sigma\n\n# Here we evaluate a Gaussians for each sigma\ngaussians = [(2*np.pi*s**2)**-0.5 * np.exp(-0.5*x**2/s**2) for s in sigma]\n\nax = plt.axes()\n\nfor s,y in zip(sigma, gaussians):\n ax.plot(x, y, lw=1.25, label=r\"$\\sigma = %3.2f$\"%s)\n\nformula = r\"$y(x)=\\frac{1}{\\sqrt{2\\pi\\sigma^2}}e^{-\\frac{x^2}{2\\sigma^2}}$\"\n\nax.text(0.05, 0.80, formula, transform=ax.transAxes, fontsize=20)\nax.set_xlabel(r\"$x$\", fontsize=18)\nax.set_ylabel(r\"$y(x)$\", fontsize=18)\nax.legend()\nplt.show()",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "display_data",
"png": "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\nRK5CYII=\n",
"text": "<matplotlib.figure.Figure at 0x7f9ef2dd8fd0>"
}
],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": "To convert it to Plotly, I call Plotly (check out [our NB on matplotlib](http://nbviewer.ipython.org/github/plotly/python-user-guide/blob/master/s6_matplotlylib/s6_matplotlylib.ipynb) support for more details)."
},
{
"cell_type": "code",
"collapsed": false,
"input": "py.iplot_mpl(fig1) ",
"language": "python",
"metadata": {},
"outputs": [
{
"html": "<iframe id=\"igraph\" scrolling=\"no\" style=\"border:none;\"seamless=\"seamless\" src=\"https://plot.ly/~IPython.Demo/4018\" height=\"525\" width=\"100%\"></iframe>",
"metadata": {},
"output_type": "display_data",
"text": "<IPython.core.display.HTML at 0x7f9ef2bfb910>"
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": "Now if I want I can print the figure or get the data. I can also call in-line help from Plotly."
},
{
"cell_type": "code",
"collapsed": false,
"input": "from plotly.graph_objs import Data, Layout, Figure",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"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": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Convert MPL figure to Plotly\nmy_fig = tls.mpl_to_plotly(fig1)",
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Take a quick look at the Plotly representation of the MPL figure\nprint my_fig.to_string()",
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": "Figure(\n data=Data([\n Scatter(\n x=[-2.0, -1.9995999599959997, -1.9991999199919992, -1.998799879...],\n y=[3.7167987868357507e-06, 3.7354293180981496e-06, 3.7541494803...],\n name='$\\\\sigma = 0.40$',\n mode='lines',\n line=Line(\n dash='solid',\n color='#0000FF',\n width=1.25,\n opacity=1\n ),\n xaxis='x1',\n yaxis='y1'\n ),\n Scatter(\n x=[-2.0, -1.9995999599959997, -1.9991999199919992, -1.998799879...],\n y=[0.0025704649938185107, 0.0025761834897230665, 0.002581913559...],\n name='$\\\\sigma = 0.60$',\n mode='lines',\n line=Line(\n dash='solid',\n color='#007F00',\n width=1.25,\n opacity=1\n ),\n xaxis='x1',\n yaxis='y1'\n ),\n Scatter(\n x=[-2.0, -1.9995999599959997, -1.9991999199919992, -1.998799879...],\n y=[0.02191037561696068, 0.021937780710823064, 0.021965214590068...],\n name='$\\\\sigma = 0.80$',\n mode='lines',\n line=Line(\n dash='solid',\n color='#FF0000',\n width=1.25,\n opacity=1\n ),\n xaxis='x1',\n yaxis='y1'\n ),\n Scatter(\n x=[-2.0, -1.9995999599959997, -1.9991999199919992, -1.998799879...],\n y=[0.053990966513188063, 0.054034176567683667, 0.05407741254993...],\n name='$\\\\sigma = 1.00$',\n mode='lines',\n line=Line(\n dash='solid',\n color='#00BFBF',\n width=1.25,\n opacity=1\n ),\n xaxis='x1',\n yaxis='y1'\n )\n ]),\n layout=Layout(\n width=480,\n height=320,\n autosize=False,\n margin=Margin(\n l=60,\n r=47,\n b=40,\n t=31,\n pad=0\n ),\n hovermode='closest',\n showlegend=False,\n annotations=Annotations([\n Annotation(\n x=0.049865951742627333,\n y=0.79678714859437749,\n text='$y(x)=\\\\frac{1}{\\\\sqrt{2\\\\pi\\\\sigma^2}}e^{-\\\\frac{x^2...',\n xref='paper',\n yref='paper',\n showarrow=False,\n font=Font(\n size=20.0,\n color='#000000'\n ),\n opacity=1,\n xanchor='left',\n yanchor='bottom'\n ),\n Annotation(\n x=0.84248977989278806,\n y=0.91129032258064524,\n text='$\\\\sigma = 0.40$',\n xref='paper',\n yref='paper',\n showarrow=False,\n font=Font(\n size=12.0,\n color='#000000'\n ),\n opacity=1,\n xanchor='left',\n yanchor='bottom'\n ),\n Annotation(\n x=0.84248977989278806,\n y=0.83198924731182788,\n text='$\\\\sigma = 0.60$',\n xref='paper',\n yref='paper',\n showarrow=False,\n font=Font(\n size=12.0,\n color='#000000'\n ),\n opacity=1,\n xanchor='left',\n yanchor='bottom'\n ),\n Annotation(\n x=0.84248977989278806,\n y=0.75268817204301075,\n text='$\\\\sigma = 0.80$',\n xref='paper',\n yref='paper',\n showarrow=False,\n font=Font(\n size=12.0,\n color='#000000'\n ),\n opacity=1,\n xanchor='left',\n yanchor='bottom'\n ),\n Annotation(\n x=0.84248977989278806,\n y=0.67338709677419362,\n text='$\\\\sigma = 1.00$',\n xref='paper',\n yref='paper',\n showarrow=False,\n font=Font(\n size=12.0,\n color='#000000'\n ),\n opacity=1,\n xanchor='left',\n yanchor='bottom'\n )\n ]),\n xaxis1=XAxis(\n title='$x$',\n domain=[0.0, 1.0],\n range=[-2.0, 2.0],\n type='linear',\n showline=True,\n ticks='inside',\n nticks=9,\n showgrid=False,\n zeroline=False,\n titlefont=Font(\n size=18.0,\n color='#000000'\n ),\n tickfont=Font(\n size=10.0\n ),\n anchor='y1',\n side='bottom',\n mirror='ticks'\n ),\n yaxis1=YAxis(\n title='$y(x)$',\n domain=[0.0, 1.0],\n range=[0.0, 1.0],\n type='linear',\n showline=True,\n ticks='inside',\n nticks=6,\n showgrid=False,\n zeroline=False,\n titlefont=Font(\n size=18.0,\n color='#000000'\n ),\n tickfont=Font(\n size=10.0\n ),\n anchor='x1',\n side='left',\n mirror='ticks'\n )\n )\n)\n"
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": "# Strip out the data from the Figure\nmy_data = my_fig.get_data()\nmy_data",
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment