{ "metadata": { "name": "", "signature": "sha256:55c816ad8735a10d0dcbfe3db6592e8201db31ee782183eb1aeeae194403313c" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 1, "metadata": {}, "source": [ "Converting matplotlib
annotations to Plotly" ] }, { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "a briefing on fundamental differences between
\n", "matplotlib and Plotly annotations" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From [python-api #48](https://github.com/plotly/python-api/pull/48):\n", "\n", "\u00c9tienne:\n", "\n", "> The question now becomes if and/or how to automatically increase the margins to make annotations like theses fit in the figure's frame? Note that **we could also increase the range** (in this case, the x-axis' range) **to make the annotations fit**. But, this is probably not the best solution.\n", "\n", "Andrew:\n", "\n", "> Well, i'll be getting the frame to go away there at least... it's extremely difficult to track down whether or not the ticks are set to be on or off so far. But i'm pretty sure i'll be able to track that down soon. In other words, **we wouldn't need to increase the side of the data area if the frame wasn't showing in that plot**.\n", "\n", "Converting annotations from matplotlib to plotly is rather confusing. The following will hopefully shed some light on the topic.\n", "\n", "
" ] }, { "cell_type": "code", "collapsed": false, "input": [ "import plotly\n", "plotly.__version__" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 1, "text": [ "'1.1.1'" ] } ], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "import plotly.plotly as py \n", "import plotly.tools as tls\n", "from plotly.graph_objs import *" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "code", "collapsed": false, "input": [ "import matplotlib.pyplot as plt\n", "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "1. Data-referenced annotations that are positioned over plot edge" ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Plotly example" ] }, { "cell_type": "code", "collapsed": true, "input": [ "data = Data([\n", " Scatter(\n", " x = [1,2,3],\n", " y = [4,5,1]\n", " )\n", "])\n", "\n", "layout= Layout(\n", " xaxis= XAxis(\n", " range=[0,4]\n", " ),\n", " yaxis= YAxis(\n", " range=[0,5.5]\n", " ),\n", " annotations= Annotations([\n", " Annotation(\n", " xref='x1',\n", " yref='y1',\n", " x = 5,\n", " y = 6,\n", " text='out of range',\n", " showarrow=False\n", " ),\n", " Annotation(\n", " xref='paper',\n", " yref='paper',\n", " x = 1.1,\n", " y = 1.1,\n", " text='ouside plot edge\\n but still showing',\n", " showarrow=False\n", " )\n", " ])\n", ")\n", "\n", "fig = Figure(data=data, layout=layout)\n", "\n", "py.iplot(fig, filename='mpl-annotations1')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 4 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* So, the *out of range* annotation does not show when the plot is first rendered. \n", "\n", "* But, by zooming out (out of the set axis range) we can see it." ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "mpl example" ] }, { "cell_type": "code", "collapsed": false, "input": [ "help(plt.text)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stdout", "text": [ "Help on function text in module matplotlib.pyplot:\n", "\n", "text(x, y, s, fontdict=None, withdash=False, **kwargs)\n", " Add text to the axes.\n", " \n", " Add text in string *s* to axis at location *x*, *y*, data\n", " coordinates.\n", " \n", " Parameters\n", " ----------\n", " s : string\n", " text\n", " \n", " x, y : scalars\n", " data coordinates\n", " \n", " fontdict : dictionary, optional, default: None\n", " A dictionary to override the default text properties. If fontdict\n", " is None, the defaults are determined by your rc parameters.\n", " \n", " withdash : boolean, optional, default: False\n", " Creates a `~matplotlib.text.TextWithDash` instance instead of a\n", " `~matplotlib.text.Text` instance.\n", " \n", " Other parameters\n", " ----------------\n", " kwargs : `~matplotlib.text.Text` properties.\n", " Other miscellaneous text parameters.\n", " \n", " Examples\n", " --------\n", " Individual keyword arguments can be used to override any given\n", " parameter::\n", " \n", " >>> text(x, y, s, fontsize=12)\n", " \n", " The default transform specifies that text is in data coords,\n", " alternatively, you can specify text in axis coords (0,0 is\n", " lower-left and 1,1 is upper-right). The example below places\n", " text in the center of the axes::\n", " \n", " >>> text(0.5, 0.5,'matplotlib', horizontalalignment='center',\n", " ... verticalalignment='center',\n", " ... transform=ax.transAxes)\n", " \n", " You can put a rectangular box around the text instance (e.g., to\n", " set a background color) by using the keyword *bbox*. *bbox* is\n", " a dictionary of `~matplotlib.patches.Rectangle`\n", " properties. For example::\n", " \n", " >>> text(x, y, s, bbox=dict(facecolor='red', alpha=0.5))\n", "\n" ] } ], "prompt_number": 5 }, { "cell_type": "markdown", "metadata": {}, "source": [ "more info [here](http://matplotlib.org/users/annotations_intro.html)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig_mpl = plt.figure()\n", "ax = plt.subplot(111)\n", "\n", "plt.xlim(0, 4) \n", "plt.ylim(0, 5.5) \n", "\n", "plt.text(5,6,'out of range (but showing)',\n", " horizontalalignment='center')\n", "\n", "ax.annotate(\"ouside plot edge \\n(axes fraction ref)\", \n", " xy=(1, 1), xycoords='data', # (useless w/o arrow) \n", " xytext=(1.1,1.1), textcoords='axes fraction',\n", " horizontalalignment='center',\n", " #arrowprops=dict(facecolor='black', shrink=0.05) # arrow\n", " )\n", "\n", "plt.plot([1,2,3],[4,5,1])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 6 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* mpl displays the data-reference annoation outside the frame by default" ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "2. Long annotations and margins" ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "Plotly" ] }, { "cell_type": "code", "collapsed": false, "input": [ "data = Data([\n", " Scatter(\n", " x = [1,2,3],\n", " y = [4,5,1]\n", " )\n", "])\n", "\n", "layout= Layout(\n", " xaxis= XAxis(\n", " range=[0,4]\n", " ),\n", " yaxis= YAxis(\n", " range=[0,5.5]\n", " ),\n", " annotations= Annotations([\n", " Annotation(\n", " xref='x1',\n", " yref='y1',\n", " x = 3.5,\n", " y = 3,\n", " text='A loooooooooooooooooooooooooooooooonnnnnnnngggggggg annotation',\n", " showarrow=False,\n", " xanchor='left'\n", " ),\n", " ]),\n", " showlegend=False\n", ")\n", "\n", "fig = Figure(data=data, layout=layout)\n", "\n", "py.iplot(fig, filename='mpl-annotations2')" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Long annotations span across the axis range but do not modify the margin size." ] }, { "cell_type": "heading", "level": 5, "metadata": {}, "source": [ "matplotlib" ] }, { "cell_type": "code", "collapsed": false, "input": [ "fig_mpl = plt.figure()\n", "ax = plt.subplot(111)\n", "\n", "plt.xlim(0, 4) \n", "plt.ylim(0, 5.5) \n", "\n", "plt.text(3.5,3,'A loooooooooooooooooooooooooooooooonnnnnnnngggggggg annotation')\n", "\n", "plt.plot([1,2,3],[4,5,1])" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "[]" ] }, { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Here the margin are adjusted to make the annotation *fit*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "
\n", "
" ] }, { "cell_type": "code", "collapsed": false, "input": [ "from IPython.display import display, HTML\n", "import urllib2\n", "url = 'https://raw.githubusercontent.com/plotly/python-user-guide/master/custom.css'\n", "display(HTML(urllib2.urlopen(url).read()))" ], "language": "python", "metadata": {}, "outputs": [ { "html": [ "\n", "\n" ], "metadata": {}, "output_type": "display_data", "text": [ "" ] } ], "prompt_number": 9 } ], "metadata": {} } ] }