Skip to content

Instantly share code, notes, and snippets.

@msund
Last active August 29, 2015 14:01
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save msund/403910de45e282d658fa to your computer and use it in GitHub Desktop.
Save msund/403910de45e282d658fa to your computer and use it in GitHub Desktop.
R Notebook
{
"metadata": {
"name": "",
"signature": "sha256:4abc3bda22c03a05e4c028a06c0fdb0efbd5a6220ac512d85f9529fe8f08d9b7"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Pretty R and ggplot2 plots <br> with Plotly and IPython"
]
},
{
"cell_type": "heading",
"level": 3,
"metadata": {},
"source": [
"<i>Introduction</i>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"[Plotly](https://plot.ly) lets you collaboratively make and share beautiful, web-based plots. You can collaborativley use R, ggplot2, and a GUI, along with and MATLAB, Python, and Excel. Here are some of your charting options:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"https://plot.ly/r\"><img src=\"http://i.imgur.com/MM7xEJf.png\" title=\"R\"/></a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This Notebook will cover:\n",
"\n",
"* [World Bank plotting with ggplot2](#I.-World-Bank-plotting-with-ggplot2)\n",
"* [Facets with ggplot2](#II.-Facets-with-ggplot2)\n",
"* [Collaboration and flexibility with Plotly](#III.-Collaboration-and-flexibility-with-Plotly)\n",
"* [Bar charts in ggplot2 and Plotly](#IV.-Bar-charts-in-ggplot2-and-Plotly)\n",
"* [Scatter plots](#V.-Scatter-plots)\n",
"* [Embedding](#VI.-Embedding)\n",
"* [Native capabilities, roadmap, and getting in touch](#VII.-Native-capabilities,-roadmap,-and-getting-in-touch)\n",
"* [IPython installation and use](#VIII.-IPython-installation-and-use)"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"I. World Bank plotting with ggplot2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's plot! You can copy and paste any of these examples into your R environment to follow along. Head over to our [getting started](https://plot.ly/r/getting-started/) page for more on installation."
]
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"local({r <- getOption(\"repos\") # You'll want to select the CRAN mirror you like.\n",
" r[\"CRAN\"] <- \"http://cran.r-project.org\" \n",
" options(repos=r)\n",
"})"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Use Plotly's public sandbox (shown below), or [sign-up](https://plot.ly/ssu). You can add your username and email and run this command: `signup(\"new_username\", \"your_email@domain.com\")` to get a key. Let's make our first plot with a ggplot2 plot from [the World Bank website](http://blogs.worldbank.org/opendata/accessing-world-bank-data-apis-python-r-ruby-stata). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"http://blogs.worldbank.org/opendata/accessing-world-bank-data-apis-python-r-ruby-stata\"><img src=\"http://i.imgur.com/PkRRmHq.png\" title=\"Hosted by imgur.com\"/></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We run the script, call `py$ggplotly`, and re-draw the ggplot2 figure in Plotly."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"install.packages(\"devtools\") # windows users install Rtools\n",
"library(\"devtools\")\n",
"install_github(\"ropensci/plotly\") # Plotly is part of the super cool rOpenSci\n",
" \n",
"library(plotly) # install libraries we\u2019ll be using\n",
"library(ggplot2)\n",
"library(reshape)\n",
" \n",
"py <- plotly(\"ggplot2examples\", \"3gazttckd7\") # initiate plot object\n",
" \n",
"library(WDI) # now we\u2019ll make the plot from the blog post\n",
"library(ggplot2)\n",
" \n",
"dat = WDI(indicator='NY.GNP.PCAP.CD', country=c('CL','HU','UY'), start=1960, end=2012) # Grab GNI per \n",
"# capita data for Chile, Hungary and Uruguay\n",
" \n",
"wb <- ggplot(dat, aes(year, NY.GNP.PCAP.CD, color=country)) + geom_line() \n",
"+ xlab('Year') + ylab('GDI per capita (Atlas Method USD)') \n",
"+ labs(title <- \"GNI Per Capita ($USD Atlas Method)\")\n",
" \n",
"py$ggplotly(wb) # call Plotly"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"That produces an error, but that's ok: Plotly still graphs it and grabs the data. Grab the response from https://plot.ly/~ggplot2examples, make an iframe function, and add the URL for your graph to your iframe. "
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"library(IRdisplay)\n",
"plotly_iframe <- function(url) {\n",
" # set width and height from options or default square\n",
" w <- \"750\"\n",
" h <- \"600\"\n",
" html <- paste(\"<center><iframe height=\\\"\", h, \"\\\" id=\\\"igraph\\\" scrolling=\\\"no\\\" seamless=\\\"seamless\\\"\\n\\t\\t\\t\\tsrc=\\\"\", \n",
" url, \"\\\" width=\\\"\", w, \"\\\" frameBorder=\\\"0\\\"></iframe></center>\", sep=\"\")\n",
" return(html)\n",
"}"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~ggplot2examples/98\"))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~ggplot2examples/98\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 4
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The data is stored with the plot. I forked the data and shared it: https://plot.ly/~MattSundquist/1343."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below, you'll find graphs made with the same data using Plotly's Python API, matplotlib, and our web app. You can find all of these in [another Notebook](http://nbviewer.ipython.org/gist/msund/61cdbd5b22c103fffb84). "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"http://nbviewer.ipython.org/gist/msund/61cdbd5b22c103fffb84\"><img src=\"http://i.imgur.com/9W55PfK.png\" title=\"IPythonNB\"/></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Take-away: <i>You can edit the same graph and add data from any language or our web GUI</i>. Collaboration and technical flexibility between languages, the GUI, and users of all types is what Plotly is all about.\n",
"\n",
"Just add '.r' to the end of Plotly URLS (e.g. https://plot.ly/~MattSundquist/1339.r) and you can see the plot object in Plotly's declarative syntax for R.\n",
"\n",
"Here are your other options for the plot we just made:\n",
"\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.py\">https://plot.ly/~ggplot2examples/98.py</a>\n",
"<li type=disc></a><a href=\"https://plot.ly/~ggplot2examples/98.m\">https://plot.ly/~ggplot2examples/98.m</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.jl\">https://plot.ly/~ggplot2examples/98.jl</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.js\">https://plot.ly/~ggplot2examples/98.js</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.json\">https://plot.ly/~ggplot2examples/98.json</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.svg\">https://plot.ly/~ggplot2examples/98.svg</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.png\">https://plot.ly/~ggplot2examples/98.png</a>\n",
"<li type=disc> <a href=\"https://plot.ly/~ggplot2examples/98.pdf\">https://plot.ly/~ggplot2examples/98.pdf</a>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"https://plot.ly/~MattSundquist/1343/\"><img src=\"http://i.imgur.com/xhphGUi.png\" title=\"Plotly Data\"/></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"https://plot.ly/1339/~MattSundquist/\"><img src=\"http://i.imgur.com/DqenYUa.png?1\" title=\"GNI Per Capita\" /></a><br>"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~MattSundquist/1339\"))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~MattSundquist/1339\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"str(dat) # Once published, you can list all objects and their attributes"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"'data.frame':\t159 obs. of 4 variables:\n",
" $ iso2c : chr \"CL\" \"CL\" \"CL\" \"CL\" ...\n",
" $ country : chr \"Chile\" \"Chile\" \"Chile\" \"Chile\" ...\n",
" $ NY.GNP.PCAP.CD: num 14290 12290 10730 9940 10030 ...\n",
" $ year : num 2012 2011 2010 2009 2008 ...\n"
]
}
],
"prompt_number": 6
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"py <- plotly(\"ggplot2examples\", \"3gazttckd7\") # Or you can use Plotly to call any figure\n",
"figure <- py$get_figure(\"MattSundquist\", 1339)\n",
"str(figure)"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"List of 2\n",
" $ layout:List of 25\n",
" ..$ boxmode : chr \"overlay\"\n",
" ..$ paper_bgcolor: chr \"#fff\"\n",
" ..$ height : num 547\n",
" ..$ titlefont :List of 3\n",
" .. ..$ color : chr \"\"\n",
" .. ..$ family: chr \"\"\n",
" .. ..$ size : num 0\n",
" ..$ hovermode : chr \"x\"\n",
" ..$ font :List of 3\n",
" .. ..$ color : chr \"rgb(67, 67, 67)\"\n",
" .. ..$ family: chr \"'Open sans', verdana, arial, sans-serif\"\n",
" .. ..$ size : num 12\n",
" ..$ autosize : logi TRUE\n",
" ..$ title : chr \"GNI Per Capita ($USD Atlas Method)\"\n",
" ..$ plot_bgcolor : chr \"rgba(245, 247, 247, 0.7)\"\n",
" ..$ dragmode : chr \"zoom\"\n",
" ..$ smith : logi FALSE\n",
" ..$ width : num 1304\n",
" ..$ bargap : num 0.2\n",
" ..$ xaxis :List of 33\n",
" .. ..$ showexponent : chr \"all\"\n",
" .. ..$ showticklabels: logi TRUE\n",
" .. ..$ domain : num [1:2] 0 1\n",
" .. ..$ gridcolor : chr \"rgb(255, 255, 255)\"\n",
" .. ..$ linecolor : chr \"#444\"\n",
" .. ..$ mirror : logi FALSE\n",
" .. ..$ autotick : logi TRUE\n",
" .. ..$ linewidth : num 1\n",
" .. ..$ nticks : num 0\n",
" .. ..$ title : chr \"year\"\n",
" .. ..$ ticks : chr \"\"\n",
" .. ..$ rangemode : chr \"normal\"\n",
" .. ..$ overlaying : logi FALSE\n",
" .. ..$ zeroline : logi FALSE\n",
" .. ..$ type : chr \"linear\"\n",
" .. ..$ autorange : logi TRUE\n",
" .. ..$ zerolinewidth : num 1\n",
" .. ..$ ticklen : num 5\n",
" .. ..$ titlefont :List of 3\n",
" .. .. ..$ color : chr \"\"\n",
" .. .. ..$ family: chr \"\"\n",
" .. .. ..$ size : num 0\n",
" .. ..$ tickcolor : chr \"#444\"\n",
" .. ..$ showline : logi FALSE\n",
" .. ..$ showgrid : logi TRUE\n",
" .. ..$ tickfont :List of 3\n",
" .. .. ..$ color : chr \"\"\n",
" .. .. ..$ family: chr \"\"\n",
" .. .. ..$ size : num 0\n",
" .. ..$ tickwidth : num 1\n",
" .. ..$ tick0 : num 0\n",
" .. ..$ tickangle : chr \"auto\"\n",
" .. ..$ gridwidth : num 1\n",
" .. ..$ dtick : num 10\n",
" .. ..$ zerolinecolor : chr \"#444\"\n",
" .. ..$ range : num [1:2] 1960 2012\n",
" .. ..$ position : num 0\n",
" .. ..$ anchor : chr \"y\"\n",
" .. ..$ exponentformat: chr \"B\"\n",
" ..$ bargroupgap : num 0\n",
" ..$ hidesources : logi FALSE\n",
" ..$ showlegend : logi TRUE\n",
" ..$ separators : chr \".,\"\n",
" ..$ barmode : chr \"group\"\n",
" ..$ boxgap : num 0.3\n",
" ..$ legend :List of 9\n",
" .. ..$ bordercolor: chr \"#444\"\n",
" .. ..$ yanchor : chr \"auto\"\n",
" .. ..$ traceorder : chr \"normal\"\n",
" .. ..$ xanchor : chr \"left\"\n",
" .. ..$ bgcolor : chr \"#fff\"\n",
" .. ..$ borderwidth: num 0\n",
" .. ..$ y : num 0.5\n",
" .. ..$ x : num 1.02\n",
" .. ..$ font :List of 3\n",
" .. .. ..$ color : chr \"\"\n",
" .. .. ..$ family: chr \"\"\n",
" .. .. ..$ size : num 0\n",
" ..$ yaxis :List of 33\n",
" .. ..$ showexponent : chr \"all\"\n",
" .. ..$ showticklabels: logi TRUE\n",
" .. ..$ domain : num [1:2] 0 1\n",
" .. ..$ gridcolor : chr \"rgb(255, 255, 255)\"\n",
" .. ..$ linecolor : chr \"#444\"\n",
" .. ..$ mirror : logi FALSE\n",
" .. ..$ autotick : logi TRUE\n",
" .. ..$ linewidth : num 1\n",
" .. ..$ nticks : num 0\n",
" .. ..$ title : chr \"NY.GNP.PCAP.CD\"\n",
" .. ..$ ticks : chr \"\"\n",
" .. ..$ rangemode : chr \"normal\"\n",
" .. ..$ overlaying : logi FALSE\n",
" .. ..$ zeroline : logi FALSE\n",
" .. ..$ type : chr \"log\"\n",
" .. ..$ autorange : logi TRUE\n",
" .. ..$ zerolinewidth : num 1\n",
" .. ..$ ticklen : num 5\n",
" .. ..$ titlefont :List of 3\n",
" .. .. ..$ color : chr \"\"\n",
" .. .. ..$ family: chr \"\"\n",
" .. .. ..$ size : num 0\n",
" .. ..$ tickcolor : chr \"#444\"\n",
" .. ..$ showline : logi FALSE\n",
" .. ..$ showgrid : logi TRUE\n",
" .. ..$ tickfont :List of 3\n",
" .. .. ..$ color : chr \"\"\n",
" .. .. ..$ family: chr \"\"\n",
" .. .. ..$ size : num 0\n",
" .. ..$ tickwidth : num 1\n",
" .. ..$ tick0 : num 0\n",
" .. ..$ tickangle : chr \"auto\"\n",
" .. ..$ gridwidth : num 1\n",
" .. ..$ dtick : chr \"D1\"\n",
" .. ..$ zerolinecolor : chr \"#444\"\n",
" .. ..$ range : num [1:2] 2.65 4.23\n",
" .. ..$ position : num 0\n",
" .. ..$ anchor : chr \"x\"\n",
" .. ..$ exponentformat: chr \"B\"\n",
" ..$ annotations :List of 1\n",
" .. ..$ :List of 22\n",
" .. .. ..$ yanchor : chr \"auto\"\n",
" .. .. ..$ text : chr \"Source: <a href=\\\"http://blogs.worldbank.org/opendata/accessing-world-bank-data-apis-python-r-ruby-stata\\\">World Bank</a>\"\n",
" .. .. ..$ bordercolor: chr \"\"\n",
" .. .. ..$ arrowsize : num 1\n",
" .. .. ..$ tag : chr \"\"\n",
" .. .. ..$ borderwidth: num 1\n",
" .. .. ..$ ay : num -28.3\n",
" .. .. ..$ ax : num -10\n",
" .. .. ..$ font :List of 3\n",
" .. .. .. ..$ color : chr \"\"\n",
" .. .. .. ..$ family: chr \"\"\n",
" .. .. .. ..$ size : num 0\n",
" .. .. ..$ arrowcolor : chr \"\"\n",
" .. .. ..$ xref : chr \"paper\"\n",
" .. .. ..$ arrowhead : num 1\n",
" .. .. ..$ bgcolor : chr \"rgba(0,0,0,0)\"\n",
" .. .. ..$ borderpad : num 1\n",
" .. .. ..$ showarrow : logi FALSE\n",
" .. .. ..$ opacity : num 1\n",
" .. .. ..$ xanchor : chr \"auto\"\n",
" .. .. ..$ arrowwidth : num 0\n",
" .. .. ..$ yref : chr \"paper\"\n",
" .. .. ..$ align : chr \"center\"\n",
" .. .. ..$ y : num 0.0299\n",
" .. .. ..$ x : num 0.988\n",
" ..$ boxgroupgap : num 0.3\n",
" ..$ margin :List of 6\n",
" .. ..$ b : num 80\n",
" .. ..$ l : num 80\n",
" .. ..$ r : num 80\n",
" .. ..$ pad : num 0\n",
" .. ..$ t : num 100\n",
" .. ..$ autoexpand: logi TRUE\n",
" $ data :List of 3\n",
" ..$ :List of 12\n",
" .. ..$ textfont: Named list()\n",
" .. ..$ error_x : Named list()\n",
" .. ..$ name : chr \"Chile\"\n",
" .. ..$ uid : chr \"5485f4\"\n",
" .. ..$ text : NULL\n",
" .. ..$ y :List of 53\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : num 600\n",
" .. .. ..$ : num 640\n",
" .. .. ..$ : num 660\n",
" .. .. ..$ : num 650\n",
" .. .. ..$ : num 740\n",
" .. .. ..$ : num 760\n",
" .. .. ..$ : num 770\n",
" .. .. ..$ : num 800\n",
" .. .. ..$ : num 860\n",
" .. .. ..$ : num 1020\n",
" .. .. ..$ : num 1110\n",
" .. .. ..$ : num 1320\n",
" .. .. ..$ : num 1620\n",
" .. .. ..$ : num 1120\n",
" .. .. ..$ : num 980\n",
" .. .. ..$ : num 1070\n",
" .. .. ..$ : num 1320\n",
" .. .. ..$ : num 1740\n",
" .. .. ..$ : num 2240\n",
" .. .. ..$ : num 2640\n",
" .. .. ..$ : num 2190\n",
" .. .. ..$ : num 1780\n",
" .. .. ..$ : num 1600\n",
" .. .. ..$ : num 1410\n",
" .. .. ..$ : num 1410\n",
" .. .. ..$ : num 1560\n",
" .. .. ..$ : num 1820\n",
" .. .. ..$ : num 2090\n",
" .. .. ..$ : num 2240\n",
" .. .. ..$ : num 2490\n",
" .. .. ..$ : num 3020\n",
" .. .. ..$ : num 3330\n",
" .. .. ..$ : num 3610\n",
" .. .. ..$ : num 4320\n",
" .. .. ..$ : num 4930\n",
" .. .. ..$ : num 5380\n",
" .. .. ..$ : num 5250\n",
" .. .. ..$ : num 4910\n",
" .. .. ..$ : num 4920\n",
" .. .. ..$ : num 4760\n",
" .. .. ..$ : num 4550\n",
" .. .. ..$ : num 4570\n",
" .. .. ..$ : num 5230\n",
" .. .. ..$ : num 6250\n",
" .. .. ..$ : num 7260\n",
" .. .. ..$ : num 8630\n",
" .. .. ..$ : num 10020\n",
" .. .. ..$ : num 9930\n",
" .. .. ..$ : num 10720\n",
" .. .. ..$ : num 12270\n",
" .. .. ..$ : num 14310\n",
" .. ..$ mode : chr \"lines\"\n",
" .. ..$ marker :List of 1\n",
" .. .. ..$ line: Named list()\n",
" .. ..$ x : num [1:53] 1960 1961 1962 1963 1964 ...\n",
" .. ..$ line :List of 3\n",
" .. .. ..$ color: chr \"rgb(31, 119, 180)\"\n",
" .. .. ..$ width: num 4\n",
" .. .. ..$ shape: chr \"spline\"\n",
" .. ..$ type : chr \"scatter\"\n",
" .. ..$ error_y : Named list()\n",
" ..$ :List of 12\n",
" .. ..$ textfont: Named list()\n",
" .. ..$ error_x : Named list()\n",
" .. ..$ name : chr \"Hungary\"\n",
" .. ..$ uid : chr \"cc0f76\"\n",
" .. ..$ text : NULL\n",
" .. ..$ y :List of 53\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : num 540\n",
" .. .. ..$ : num 590\n",
" .. .. ..$ : num 670\n",
" .. .. ..$ : num 830\n",
" .. .. ..$ : num 1000\n",
" .. .. ..$ : num 1150\n",
" .. .. ..$ : num 1200\n",
" .. .. ..$ : num 1330\n",
" .. .. ..$ : num 1520\n",
" .. .. ..$ : num 1770\n",
" .. .. ..$ : num 2070\n",
" .. .. ..$ : num 2200\n",
" .. .. ..$ : num 2170\n",
" .. .. ..$ : num 2010\n",
" .. .. ..$ : num 1930\n",
" .. .. ..$ : num 1860\n",
" .. .. ..$ : num 2040\n",
" .. .. ..$ : num 2400\n",
" .. .. ..$ : num 2710\n",
" .. .. ..$ : num 2770\n",
" .. .. ..$ : num 2880\n",
" .. .. ..$ : num 2740\n",
" .. .. ..$ : num 3140\n",
" .. .. ..$ : num 3630\n",
" .. .. ..$ : num 4000\n",
" .. .. ..$ : num 4220\n",
" .. .. ..$ : num 4320\n",
" .. .. ..$ : num 4370\n",
" .. .. ..$ : num 4380\n",
" .. .. ..$ : num 4460\n",
" .. .. ..$ : num 4580\n",
" .. .. ..$ : num 4720\n",
" .. .. ..$ : num 5210\n",
" .. .. ..$ : num 6550\n",
" .. .. ..$ : num 8540\n",
" .. .. ..$ : num 10220\n",
" .. .. ..$ : num 11040\n",
" .. .. ..$ : num 11510\n",
" .. .. ..$ : num 12890\n",
" .. .. ..$ : num 12980\n",
" .. .. ..$ : num 12930\n",
" .. .. ..$ : num 12900\n",
" .. .. ..$ : num 12410\n",
" .. ..$ mode : chr \"lines\"\n",
" .. ..$ marker :List of 1\n",
" .. .. ..$ line: Named list()\n",
" .. ..$ x : num [1:53] 1960 1961 1962 1963 1964 ...\n",
" .. ..$ line :List of 3\n",
" .. .. ..$ color: chr \"rgb(255, 127, 14)\"\n",
" .. .. ..$ width: num 4\n",
" .. .. ..$ shape: chr \"spline\"\n",
" .. ..$ type : chr \"scatter\"\n",
" .. ..$ error_y : Named list()\n",
" ..$ :List of 12\n",
" .. ..$ textfont: Named list()\n",
" .. ..$ error_x : Named list()\n",
" .. ..$ name : chr \"Uruguay\"\n",
" .. ..$ uid : chr \"fe96aa\"\n",
" .. ..$ text : NULL\n",
" .. ..$ y :List of 53\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : NULL\n",
" .. .. ..$ : num 580\n",
" .. .. ..$ : num 610\n",
" .. .. ..$ : num 660\n",
" .. .. ..$ : num 680\n",
" .. .. ..$ : num 720\n",
" .. .. ..$ : num 640\n",
" .. .. ..$ : num 610\n",
" .. .. ..$ : num 670\n",
" .. .. ..$ : num 820\n",
" .. .. ..$ : num 850\n",
" .. .. ..$ : num 870\n",
" .. .. ..$ : num 1060\n",
" .. .. ..$ : num 1370\n",
" .. .. ..$ : num 1620\n",
" .. .. ..$ : num 1490\n",
" .. .. ..$ : num 1420\n",
" .. .. ..$ : num 1630\n",
" .. .. ..$ : num 2150\n",
" .. .. ..$ : num 2870\n",
" .. .. ..$ : num 3650\n",
" .. .. ..$ : num 3290\n",
" .. .. ..$ : num 2190\n",
" .. .. ..$ : num 1740\n",
" .. .. ..$ : num 1510\n",
" .. .. ..$ : num 1780\n",
" .. .. ..$ : num 2210\n",
" .. .. ..$ : num 2600\n",
" .. .. ..$ : num 2730\n",
" .. .. ..$ : num 2840\n",
" .. .. ..$ : num 3180\n",
" .. .. ..$ : num 3830\n",
" .. .. ..$ : num 4350\n",
" .. .. ..$ : num 5040\n",
" .. .. ..$ : num 5530\n",
" .. .. ..$ : num 6160\n",
" .. .. ..$ : num 6970\n",
" .. .. ..$ : num 7240\n",
" .. .. ..$ : num 7260\n",
" .. .. ..$ : num 7050\n",
" .. .. ..$ : num 6500\n",
" .. .. ..$ : num 5140\n",
" .. .. ..$ : num 4240\n",
" .. .. ..$ : num 4130\n",
" .. .. ..$ : num 4720\n",
" .. .. ..$ : num 5380\n",
" .. .. ..$ : num 6380\n",
" .. .. ..$ : num 7690\n",
" .. .. ..$ : num 8520\n",
" .. .. ..$ : num 10110\n",
" .. .. ..$ : num 11700\n",
" .. .. ..$ : num 13580\n",
" .. ..$ mode : chr \"lines\"\n",
" .. ..$ marker :List of 1\n",
" .. .. ..$ line: Named list()\n",
" .. ..$ x : num [1:53] 1960 1961 1962 1963 1964 ...\n",
" .. ..$ line :List of 3\n",
" .. .. ..$ color: chr \"rgb(44, 160, 44)\"\n",
" .. .. ..$ width: num 4\n",
" .. .. ..$ shape: chr \"spline\"\n",
" .. ..$ type : chr \"scatter\"\n",
" .. ..$ error_y : Named list()\n"
]
}
],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"figure$data[] # or call the data so you can analyze it or bring data from any plot into your R environment "
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"[[1]]\n",
"[[1]]$textfont\n",
"named list()\n",
"\n",
"[[1]]$error_x\n",
"named list()\n",
"\n",
"[[1]]$name\n",
"[1] \"Chile\"\n",
"\n",
"[[1]]$uid\n",
"[1] \"5485f4\"\n",
"\n",
"[[1]]$text\n",
"NULL\n",
"\n",
"[[1]]$y\n",
"[[1]]$y[[1]]\n",
"NULL\n",
"\n",
"[[1]]$y[[2]]\n",
"NULL\n",
"\n",
"[[1]]$y[[3]]\n",
"[1] 600\n",
"\n",
"[[1]]$y[[4]]\n",
"[1] 640\n",
"\n",
"[[1]]$y[[5]]\n",
"[1] 660\n",
"\n",
"[[1]]$y[[6]]\n",
"[1] 650\n",
"\n",
"[[1]]$y[[7]]\n",
"[1] 740\n",
"\n",
"[[1]]$y[[8]]\n",
"[1] 760\n",
"\n",
"[[1]]$y[[9]]\n",
"[1] 770\n",
"\n",
"[[1]]$y[[10]]\n",
"[1] 800\n",
"\n",
"[[1]]$y[[11]]\n",
"[1] 860\n",
"\n",
"[[1]]$y[[12]]\n",
"[1] 1020\n",
"\n",
"[[1]]$y[[13]]\n",
"[1] 1110\n",
"\n",
"[[1]]$y[[14]]\n",
"[1] 1320\n",
"\n",
"[[1]]$y[[15]]\n",
"[1] 1620\n",
"\n",
"[[1]]$y[[16]]\n",
"[1] 1120\n",
"\n",
"[[1]]$y[[17]]\n",
"[1] 980\n",
"\n",
"[[1]]$y[[18]]\n",
"[1] 1070\n",
"\n",
"[[1]]$y[[19]]\n",
"[1] 1320\n",
"\n",
"[[1]]$y[[20]]\n",
"[1] 1740\n",
"\n",
"[[1]]$y[[21]]\n",
"[1] 2240\n",
"\n",
"[[1]]$y[[22]]\n",
"[1] 2640\n",
"\n",
"[[1]]$y[[23]]\n",
"[1] 2190\n",
"\n",
"[[1]]$y[[24]]\n",
"[1] 1780\n",
"\n",
"[[1]]$y[[25]]\n",
"[1] 1600\n",
"\n",
"[[1]]$y[[26]]\n",
"[1] 1410\n",
"\n",
"[[1]]$y[[27]]\n",
"[1] 1410\n",
"\n",
"[[1]]$y[[28]]\n",
"[1] 1560\n",
"\n",
"[[1]]$y[[29]]\n",
"[1] 1820\n",
"\n",
"[[1]]$y[[30]]\n",
"[1] 2090\n",
"\n",
"[[1]]$y[[31]]\n",
"[1] 2240\n",
"\n",
"[[1]]$y[[32]]\n",
"[1] 2490\n",
"\n",
"[[1]]$y[[33]]\n",
"[1] 3020\n",
"\n",
"[[1]]$y[[34]]\n",
"[1] 3330\n",
"\n",
"[[1]]$y[[35]]\n",
"[1] 3610\n",
"\n",
"[[1]]$y[[36]]\n",
"[1] 4320\n",
"\n",
"[[1]]$y[[37]]\n",
"[1] 4930\n",
"\n",
"[[1]]$y[[38]]\n",
"[1] 5380\n",
"\n",
"[[1]]$y[[39]]\n",
"[1] 5250\n",
"\n",
"[[1]]$y[[40]]\n",
"[1] 4910\n",
"\n",
"[[1]]$y[[41]]\n",
"[1] 4920\n",
"\n",
"[[1]]$y[[42]]\n",
"[1] 4760\n",
"\n",
"[[1]]$y[[43]]\n",
"[1] 4550\n",
"\n",
"[[1]]$y[[44]]\n",
"[1] 4570\n",
"\n",
"[[1]]$y[[45]]\n",
"[1] 5230\n",
"\n",
"[[1]]$y[[46]]\n",
"[1] 6250\n",
"\n",
"[[1]]$y[[47]]\n",
"[1] 7260\n",
"\n",
"[[1]]$y[[48]]\n",
"[1] 8630\n",
"\n",
"[[1]]$y[[49]]\n",
"[1] 10020\n",
"\n",
"[[1]]$y[[50]]\n",
"[1] 9930\n",
"\n",
"[[1]]$y[[51]]\n",
"[1] 10720\n",
"\n",
"[[1]]$y[[52]]\n",
"[1] 12270\n",
"\n",
"[[1]]$y[[53]]\n",
"[1] 14310\n",
"\n",
"\n",
"[[1]]$mode\n",
"[1] \"lines\"\n",
"\n",
"[[1]]$marker\n",
"[[1]]$marker$line\n",
"named list()\n",
"\n",
"\n",
"[[1]]$x\n",
" [1] 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974\n",
"[16] 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989\n",
"[31] 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004\n",
"[46] 2005 2006 2007 2008 2009 2010 2011 2012\n",
"\n",
"[[1]]$line\n",
"[[1]]$line$color\n",
"[1] \"rgb(31, 119, 180)\"\n",
"\n",
"[[1]]$line$width\n",
"[1] 4\n",
"\n",
"[[1]]$line$shape\n",
"[1] \"spline\"\n",
"\n",
"\n",
"[[1]]$type\n",
"[1] \"scatter\"\n",
"\n",
"[[1]]$error_y\n",
"named list()\n",
"\n",
"\n",
"[[2]]\n",
"[[2]]$textfont\n",
"named list()\n",
"\n",
"[[2]]$error_x\n",
"named list()\n",
"\n",
"[[2]]$name\n",
"[1] \"Hungary\"\n",
"\n",
"[[2]]$uid\n",
"[1] \"cc0f76\"\n",
"\n",
"[[2]]$text\n",
"NULL\n",
"\n",
"[[2]]$y\n",
"[[2]]$y[[1]]\n",
"NULL\n",
"\n",
"[[2]]$y[[2]]\n",
"NULL\n",
"\n",
"[[2]]$y[[3]]\n",
"NULL\n",
"\n",
"[[2]]$y[[4]]\n",
"NULL\n",
"\n",
"[[2]]$y[[5]]\n",
"NULL\n",
"\n",
"[[2]]$y[[6]]\n",
"NULL\n",
"\n",
"[[2]]$y[[7]]\n",
"NULL\n",
"\n",
"[[2]]$y[[8]]\n",
"NULL\n",
"\n",
"[[2]]$y[[9]]\n",
"NULL\n",
"\n",
"[[2]]$y[[10]]\n",
"NULL\n",
"\n",
"[[2]]$y[[11]]\n",
"[1] 540\n",
"\n",
"[[2]]$y[[12]]\n",
"[1] 590\n",
"\n",
"[[2]]$y[[13]]\n",
"[1] 670\n",
"\n",
"[[2]]$y[[14]]\n",
"[1] 830\n",
"\n",
"[[2]]$y[[15]]\n",
"[1] 1000\n",
"\n",
"[[2]]$y[[16]]\n",
"[1] 1150\n",
"\n",
"[[2]]$y[[17]]\n",
"[1] 1200\n",
"\n",
"[[2]]$y[[18]]\n",
"[1] 1330\n",
"\n",
"[[2]]$y[[19]]\n",
"[1] 1520\n",
"\n",
"[[2]]$y[[20]]\n",
"[1] 1770\n",
"\n",
"[[2]]$y[[21]]\n",
"[1] 2070\n",
"\n",
"[[2]]$y[[22]]\n",
"[1] 2200\n",
"\n",
"[[2]]$y[[23]]\n",
"[1] 2170\n",
"\n",
"[[2]]$y[[24]]\n",
"[1] 2010\n",
"\n",
"[[2]]$y[[25]]\n",
"[1] 1930\n",
"\n",
"[[2]]$y[[26]]\n",
"[1] 1860\n",
"\n",
"[[2]]$y[[27]]\n",
"[1] 2040\n",
"\n",
"[[2]]$y[[28]]\n",
"[1] 2400\n",
"\n",
"[[2]]$y[[29]]\n",
"[1] 2710\n",
"\n",
"[[2]]$y[[30]]\n",
"[1] 2770\n",
"\n",
"[[2]]$y[[31]]\n",
"[1] 2880\n",
"\n",
"[[2]]$y[[32]]\n",
"[1] 2740\n",
"\n",
"[[2]]$y[[33]]\n",
"[1] 3140\n",
"\n",
"[[2]]$y[[34]]\n",
"[1] 3630\n",
"\n",
"[[2]]$y[[35]]\n",
"[1] 4000\n",
"\n",
"[[2]]$y[[36]]\n",
"[1] 4220\n",
"\n",
"[[2]]$y[[37]]\n",
"[1] 4320\n",
"\n",
"[[2]]$y[[38]]\n",
"[1] 4370\n",
"\n",
"[[2]]$y[[39]]\n",
"[1] 4380\n",
"\n",
"[[2]]$y[[40]]\n",
"[1] 4460\n",
"\n",
"[[2]]$y[[41]]\n",
"[1] 4580\n",
"\n",
"[[2]]$y[[42]]\n",
"[1] 4720\n",
"\n",
"[[2]]$y[[43]]\n",
"[1] 5210\n",
"\n",
"[[2]]$y[[44]]\n",
"[1] 6550\n",
"\n",
"[[2]]$y[[45]]\n",
"[1] 8540\n",
"\n",
"[[2]]$y[[46]]\n",
"[1] 10220\n",
"\n",
"[[2]]$y[[47]]\n",
"[1] 11040\n",
"\n",
"[[2]]$y[[48]]\n",
"[1] 11510\n",
"\n",
"[[2]]$y[[49]]\n",
"[1] 12890\n",
"\n",
"[[2]]$y[[50]]\n",
"[1] 12980\n",
"\n",
"[[2]]$y[[51]]\n",
"[1] 12930\n",
"\n",
"[[2]]$y[[52]]\n",
"[1] 12900\n",
"\n",
"[[2]]$y[[53]]\n",
"[1] 12410\n",
"\n",
"\n",
"[[2]]$mode\n",
"[1] \"lines\"\n",
"\n",
"[[2]]$marker\n",
"[[2]]$marker$line\n",
"named list()\n",
"\n",
"\n",
"[[2]]$x\n",
" [1] 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974\n",
"[16] 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989\n",
"[31] 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004\n",
"[46] 2005 2006 2007 2008 2009 2010 2011 2012\n",
"\n",
"[[2]]$line\n",
"[[2]]$line$color\n",
"[1] \"rgb(255, 127, 14)\"\n",
"\n",
"[[2]]$line$width\n",
"[1] 4\n",
"\n",
"[[2]]$line$shape\n",
"[1] \"spline\"\n",
"\n",
"\n",
"[[2]]$type\n",
"[1] \"scatter\"\n",
"\n",
"[[2]]$error_y\n",
"named list()\n",
"\n",
"\n",
"[[3]]\n",
"[[3]]$textfont\n",
"named list()\n",
"\n",
"[[3]]$error_x\n",
"named list()\n",
"\n",
"[[3]]$name\n",
"[1] \"Uruguay\"\n",
"\n",
"[[3]]$uid\n",
"[1] \"fe96aa\"\n",
"\n",
"[[3]]$text\n",
"NULL\n",
"\n",
"[[3]]$y\n",
"[[3]]$y[[1]]\n",
"NULL\n",
"\n",
"[[3]]$y[[2]]\n",
"NULL\n",
"\n",
"[[3]]$y[[3]]\n",
"[1] 580\n",
"\n",
"[[3]]$y[[4]]\n",
"[1] 610\n",
"\n",
"[[3]]$y[[5]]\n",
"[1] 660\n",
"\n",
"[[3]]$y[[6]]\n",
"[1] 680\n",
"\n",
"[[3]]$y[[7]]\n",
"[1] 720\n",
"\n",
"[[3]]$y[[8]]\n",
"[1] 640\n",
"\n",
"[[3]]$y[[9]]\n",
"[1] 610\n",
"\n",
"[[3]]$y[[10]]\n",
"[1] 670\n",
"\n",
"[[3]]$y[[11]]\n",
"[1] 820\n",
"\n",
"[[3]]$y[[12]]\n",
"[1] 850\n",
"\n",
"[[3]]$y[[13]]\n",
"[1] 870\n",
"\n",
"[[3]]$y[[14]]\n",
"[1] 1060\n",
"\n",
"[[3]]$y[[15]]\n",
"[1] 1370\n",
"\n",
"[[3]]$y[[16]]\n",
"[1] 1620\n",
"\n",
"[[3]]$y[[17]]\n",
"[1] 1490\n",
"\n",
"[[3]]$y[[18]]\n",
"[1] 1420\n",
"\n",
"[[3]]$y[[19]]\n",
"[1] 1630\n",
"\n",
"[[3]]$y[[20]]\n",
"[1] 2150\n",
"\n",
"[[3]]$y[[21]]\n",
"[1] 2870\n",
"\n",
"[[3]]$y[[22]]\n",
"[1] 3650\n",
"\n",
"[[3]]$y[[23]]\n",
"[1] 3290\n",
"\n",
"[[3]]$y[[24]]\n",
"[1] 2190\n",
"\n",
"[[3]]$y[[25]]\n",
"[1] 1740\n",
"\n",
"[[3]]$y[[26]]\n",
"[1] 1510\n",
"\n",
"[[3]]$y[[27]]\n",
"[1] 1780\n",
"\n",
"[[3]]$y[[28]]\n",
"[1] 2210\n",
"\n",
"[[3]]$y[[29]]\n",
"[1] 2600\n",
"\n",
"[[3]]$y[[30]]\n",
"[1] 2730\n",
"\n",
"[[3]]$y[[31]]\n",
"[1] 2840\n",
"\n",
"[[3]]$y[[32]]\n",
"[1] 3180\n",
"\n",
"[[3]]$y[[33]]\n",
"[1] 3830\n",
"\n",
"[[3]]$y[[34]]\n",
"[1] 4350\n",
"\n",
"[[3]]$y[[35]]\n",
"[1] 5040\n",
"\n",
"[[3]]$y[[36]]\n",
"[1] 5530\n",
"\n",
"[[3]]$y[[37]]\n",
"[1] 6160\n",
"\n",
"[[3]]$y[[38]]\n",
"[1] 6970\n",
"\n",
"[[3]]$y[[39]]\n",
"[1] 7240\n",
"\n",
"[[3]]$y[[40]]\n",
"[1] 7260\n",
"\n",
"[[3]]$y[[41]]\n",
"[1] 7050\n",
"\n",
"[[3]]$y[[42]]\n",
"[1] 6500\n",
"\n",
"[[3]]$y[[43]]\n",
"[1] 5140\n",
"\n",
"[[3]]$y[[44]]\n",
"[1] 4240\n",
"\n",
"[[3]]$y[[45]]\n",
"[1] 4130\n",
"\n",
"[[3]]$y[[46]]\n",
"[1] 4720\n",
"\n",
"[[3]]$y[[47]]\n",
"[1] 5380\n",
"\n",
"[[3]]$y[[48]]\n",
"[1] 6380\n",
"\n",
"[[3]]$y[[49]]\n",
"[1] 7690\n",
"\n",
"[[3]]$y[[50]]\n",
"[1] 8520\n",
"\n",
"[[3]]$y[[51]]\n",
"[1] 10110\n",
"\n",
"[[3]]$y[[52]]\n",
"[1] 11700\n",
"\n",
"[[3]]$y[[53]]\n",
"[1] 13580\n",
"\n",
"\n",
"[[3]]$mode\n",
"[1] \"lines\"\n",
"\n",
"[[3]]$marker\n",
"[[3]]$marker$line\n",
"named list()\n",
"\n",
"\n",
"[[3]]$x\n",
" [1] 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974\n",
"[16] 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989\n",
"[31] 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004\n",
"[46] 2005 2006 2007 2008 2009 2010 2011 2012\n",
"\n",
"[[3]]$line\n",
"[[3]]$line$color\n",
"[1] \"rgb(44, 160, 44)\"\n",
"\n",
"[[3]]$line$width\n",
"[1] 4\n",
"\n",
"[[3]]$line$shape\n",
"[1] \"spline\"\n",
"\n",
"\n",
"[[3]]$type\n",
"[1] \"scatter\"\n",
"\n",
"[[3]]$error_y\n",
"named list()\n",
"\n"
]
}
],
"prompt_number": 8
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Sidebar: Benefits of collaboration and <br> a language-agnostic platform"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\"<i>[The Secret History](http://www.amazon.com/The-Secret-History-Donna-Tartt/dp/1400031702)</i>\" mentions the <i>Iliad's</i> notion of \"light shining from a dead star.\" Graphs are like that: a brief flash of light and brilliance from a dead dataset. Why is the data dead? Because we'll never see or access the data used in plots, especially if it's in another language. Or the data is buried in an email, desktop folder, or file. Plotly solves that problem by saving graphs with their related data, scripts, and JSON structure. \n",
"\n",
"Keeping your data and code around has other benefits; [one study](http://www.smithsonianmag.com/science-nature/the-vast-majority-of-raw-data-from-old-scientific-studies-may-now-be-missing-180948067/?no-ist) in current biology found that over 90 percent of data from papers published over the past 20 years was not available. Making your graph in Plotly ensures your data, plot, revision history, and comments will always be together and accessible. Sharing one unified entity can also be useful for publication or sharing on [figshare](http://blog.plot.ly/post/84750214457/figshare-graphs-in-plotly)."
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"II. Facets with ggplot2"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Facets in ggplot2 are awesome. Try zooming in on one of the subplots here by clicking and dragging; check out how plots with a shared axis will also zoom for you."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"p <- ggplot(diamonds, aes(x=carat, y=price))\n",
"p <- p + geom_point(aes(colour=clarity)) + facet_grid(cut ~ color, margins=TRUE)\n",
"py$ggplotly(p)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~MattSundquist/1630\")) # edited in GUI"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~MattSundquist/1630\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"III. Collaboration and flexibility with Plotly"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"People often come to a visualization with data then decide on the best visualization. As Homer Adkins once quiped:\n",
"\n",
">Basic research is like shooting an arrow into the air, and where it lands, painting a target.\n",
"\n",
"Once you have your graph in Plotly you don't need to re-code your graph (though you can). Plotly detects which graph types fit with your data. Explore like a boss. Plotly gives you comprehensive, delightful collaboration online and from our APIs. You can also use Plotly for your data exploration and analysis, collaborating with users at any level to make 3D plots and more. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"https://plot.ly/learn\"><img src=\"http://i.imgur.com/nRVZEVO.jpg\" title=\"Chart Types\"/></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"https://plot.ly/~NYT-Upshot/10/\"><img src=\"http://i.imgur.com/9Tl5bmN.png\" title=\"Baby Boomers\"/></a></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br><a href=\"http://nbviewer.ipython.org/gist/msund/61cdbd5b22c103fffb84\"><img src=\"http://i.imgur.com/PxwJuoR.png\" title=\"NB\"/></a><br>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<a href=\"https://plot.ly\"><img src=\"http://i.imgur.com/4lczVk3.png?1\" title=\"Plotly\" /></a>"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"IV. Bar charts in ggplot2 and Plotly"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's try a [wealth distribution chart](http://mhermans.net/wealth-dist-areas.html)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"require(reshape2)\n",
"require(plyr)\n",
"require(spdep)\n",
"require(igraph)\n",
"require(ggplot2)\n",
"require(RColorBrewer)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"wealth.dist <- structure(\n",
" list(\n",
" CA = c(0.054, 0.442, 0.349, 0.155), # 2005, family\n",
" FR = c(0.040, 0.440, 0.278, 0.242), # 2010, adult\n",
" IE = c(0.050, 0.390, 0.330, 0.230), # 2001, household\n",
" IT = c(0.115, 0.462, 0.301, 0.122), # 2008, household\n",
" GB = c(0.092, 0.465, 0.318, 0.125), # 2008, household\n",
" US = c(0.025, 0.265, 0.372, 0.338), # 2007, family\n",
" BE = c(0.135, 0.373, 0.300, 0.197)), # 1994, family \n",
" .Names = c(\"CA\", \"FR\", \"IE\", \"IT\", \"GB\", \"US\", \"BE\"), \n",
" row.names = c(\"Bottom 50%\", \"Mid 40%\", \"Top 9%\", \"Elite 1%\"), \n",
" class = \"data.frame\")\n",
"\n",
"wealth.dist <- wealth.dist[,order(wealth.dist[4,])] # order by share 1%\n",
"\n",
"t(wealth.dist*100) # print table"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
" Bottom 50% Mid 40% Top 9% Elite 1%\n",
"IT 11.5 46.2 30.1 12.2\n",
"GB 9.2 46.5 31.8 12.5\n",
"CA 5.4 44.2 34.9 15.5\n",
"BE 13.5 37.3 30.0 19.7\n",
"IE 5.0 39.0 33.0 23.0\n",
"FR 4.0 44.0 27.8 24.2\n",
"US 2.5 26.5 37.2 33.8"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"wealth.dist$EQ <- c(0.5, 0.4, 0.09, 0.01) # add perfectly equal country\n",
"\n",
"# restack data (one rown per combination)\n",
"d <- melt(t(wealth.dist))\n",
"names(d) <- c(\"country\", \"group\", \"value\")\n",
"d$group <- factor(d$group, levels = row.names(wealth.dist))\n",
"d$country <- factor(d$country, levels = names(wealth.dist))\n",
"\n",
"# plot distributions in stacked barchart\n",
"q <- ggplot(d, aes(country, value * 100, fill = group)) + \n",
" geom_bar(stat = \"identity\")\n",
"q <- q + scale_fill_brewer(\n",
" palette = \"RdYlBu\", \n",
" guide = guide_legend(reverse = TRUE, title = \"Groups\"))\n",
"q <- q + opts(title = \"National wealth ownership\")\n",
"q + scale_x_discrete(name = \"Country\") + \n",
" scale_y_continuous(name = \"Percentage of wealth owned\")\n",
"py$ggplotly()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"ename": "ERROR",
"evalue": "Error: Use 'theme' instead. (Defunct; last used in version 0.9.1)\n",
"output_type": "pyerr",
"traceback": [
"Error: Use 'theme' instead. (Defunct; last used in version 0.9.1)\n"
]
},
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 13,
"text": []
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAeAAAAHgCAYAAAB91L6VAAAEJGlDQ1BJQ0MgUHJvZmlsZQAAOBGFVd9v21QUPolvUqQWPyBYR4eKxa9VU1u5GxqtxgZJk6XtShal6dgqJOQ6N4mpGwfb6baqT3uBNwb8AUDZAw9IPCENBmJ72fbAtElThyqqSUh76MQPISbtBVXhu3ZiJ1PEXPX6yznfOec7517bRD1fabWaGVWIlquunc8klZOnFpSeTYrSs9RLA9Sr6U4tkcvNEi7BFffO6+EdigjL7ZHu/k72I796i9zRiSJPwG4VHX0Z+AxRzNRrtksUvwf7+Gm3BtzzHPDTNgQCqwKXfZwSeNHHJz1OIT8JjtAq6xWtCLwGPLzYZi+3YV8DGMiT4VVuG7oiZpGzrZJhcs/hL49xtzH/Dy6bdfTsXYNY+5yluWO4D4neK/ZUvok/17X0HPBLsF+vuUlhfwX4j/rSfAJ4H1H0qZJ9dN7nR19frRTeBt4Fe9FwpwtN+2p1MXscGLHR9SXrmMgjONd1ZxKzpBeA71b4tNhj6JGoyFNp4GHgwUp9qplfmnFW5oTdy7NamcwCI49kv6fN5IAHgD+0rbyoBc3SOjczohbyS1drbq6pQdqumllRC/0ymTtej8gpbbuVwpQfyw66dqEZyxZKxtHpJn+tZnpnEdrYBbueF9qQn93S7HQGGHnYP7w6L+YGHNtd1FJitqPAR+hERCNOFi1i1alKO6RQnjKUxL1GNjwlMsiEhcPLYTEiT9ISbN15OY/jx4SMshe9LaJRpTvHr3C/ybFYP1PZAfwfYrPsMBtnE6SwN9ib7AhLwTrBDgUKcm06FSrTfSj187xPdVQWOk5Q8vxAfSiIUc7Z7xr6zY/+hpqwSyv0I0/QMTRb7RMgBxNodTfSPqdraz/sDjzKBrv4zu2+a2t0/HHzjd2Lbcc2sG7GtsL42K+xLfxtUgI7YHqKlqHK8HbCCXgjHT1cAdMlDetv4FnQ2lLasaOl6vmB0CMmwT/IPszSueHQqv6i/qluqF+oF9TfO2qEGTumJH0qfSv9KH0nfS/9TIp0Wboi/SRdlb6RLgU5u++9nyXYe69fYRPdil1o1WufNSdTTsp75BfllPy8/LI8G7AUuV8ek6fkvfDsCfbNDP0dvRh0CrNqTbV7LfEEGDQPJQadBtfGVMWEq3QWWdufk6ZSNsjG2PQjp3ZcnOWWing6noonSInvi0/Ex+IzAreevPhe+CawpgP1/pMTMDo64G0sTCXIM+KdOnFWRfQKdJvQzV1+Bt8OokmrdtY2yhVX2a+qrykJfMq4Ml3VR4cVzTQVz+UoNne4vcKLoyS+gyKO6EHe+75Fdt0Mbe5bRIf/wjvrVmhbqBN97RD1vxrahvBOfOYzoosH9bq94uejSOQGkVM6sN/7HelL4t10t9F4gPdVzydEOx83Gv+uNxo7XyL/FtFl8z9ZAHF4bBsrEwAAQABJREFUeAHt3Qe8E1Xax/EHuMAV6SBNYAHpYqPYBVGQtQCKoquuiyKLuGtBXVx0m2JDXAUrYles2KVYKIL4WlZFVxReURQRFBCRIlIvvPyP78Qkt6TcJDNJfufzCZmWmTPfCffJOXPmnAo7dyUjIYAAAggggEBGBSpm9GgcDAEEEEAAAQScAAGYLwICCCCAAAI+CBCAfUDnkAgggAACCBCA+Q4ggAACCCDggwAB2Ad0DokAAggggAABmO8AAggggAACPggQgH1A55AIIIAAAggQgPkOIIAAAggg4IMAAdgHdA6JAAIIIIAAAZjvAAIIIIAAAj4IEIB9QOeQCCCAAAIIEID5DiCAAAIIIOCDAAHYB3QOiQACCCCAQEG2EqxZs8Z27NiR8uxXqFDBCgoKbNu2bSnfd3l3qHxp8KqioqLy7irln69SpYozC9rgWlzP5C61rufWrVuT+3AaP5XP17N+/fpplGXXfghkbQDeuHFjWgJR1apVrUaNGvbjjz/6cT3KPGbdunXdOf/0009lbufHymbNmtl3331n27dv9+PwpR6zsLDQqlevHsjrWa9ePfejJajXc/369VzPUr9ZxVek+3oSgIubZ/sSqqCz/QqSfwQQQACBrBQgAGflZSPTCCCAAALZLkAAzvYrSP4RQAABBLJSgACclZeNTCOAAAIIZLsAATjbryD5RwABBBDISgECcFZeNjKNAAIIIJDtAgTgbL+C5B8BBBBAICsFCMBZednINAIIIIBAtgsQgLP9CpJ/BBBAAIGsFCAAZ+VlI9MIIIAAAtkuQADO9itI/hFAAAEEslKAAJyVl41MI4AAAghkuwABONuvIPlHAAEEEMhKAQJwVl42Mo0AAgggkO0CBOBsv4LkHwEEEEAgKwUIwFl52cg0AggggEC2CxCAs/0Kkn8EEEAAgawUKMhErl966SVr1aqVderUyR1u4cKFNnv2bNu+fbsNHDjQGjVqZKtXr7YXXnjBNm7caD169LD9998/E1njGAgggAACCPgikNYAvGXLFnvqqafss88+s+bNm7sT3Lx5s02ePNkuuOACW7NmjT355JM2fPhwmzRpkvXt29fq1q1rd9xxh7Vt29aqVavmCwoHDY5A7xveCUxmpl9xcGDyQkYQQCD7BdIagFWa7dq1q9WpUycktXLlSmvWrJkLrgqwmzZtciXh9evXu+XaUKXlr7/+2jp06OA+9+OPP7pAHdrJromTTz7ZqlevHr4oJdMVK1a0goICa9CgQUr2l8qdVK5c2Xbu3GlVq1ZN5W5Tsi+51atXz+UvJTsM4E5S/Z3Q9dS1LCwsDNzZBvV6Bvn/Z5UqVQJ7PQP3BSNDTiCtAVilWb0WL14c4l67dm1EyXa33XZz1c8Kel5SYFbw9pL+QHXr1s2bde9FRUUR23grD/37TG/S9/e3rj06Ig9ByVtQ8yWs6LxFAPo8E/6dVFa4nrEvSPT1DIqZch7UvEXny1OmRtCTyJ33X6Nehs5JwVRV017atm2bKyFv3brVW2SaDi/dKkirJB2evvnmm4j9hK8LynT0H2zyFVsgqGbKeVDzFtR8BdksyHkr7XruscceyjYphwQy3gq6cePGtnz5cldVqepnr0pV1Tf64ml+6dKlrmFWDjlzKggggAACCEQIZLwEXLNmTVeavfvuu23Dhg3Wv39/lyG9P/TQQ+5+cMeOHa127doRGWUGAQQQQACBXBLISABW6+bwdMQRR9ghhxxialChl1KbNm3cS1XSapxCQgABBDIpMPJPh2fycGUca3sZ61iVSwIZCcAlgYU3ugpfT/AN12AaAQQQQCBXBTJ+DzhXITkvBBBAAAEEEhEgACeixbYIIIAAAgikSIAAnCJIdoMAAggggEAiAgTgRLTYFgEEEEAAgRQJEIBTBMluEEAAAQQQSESAAJyIFtsigAACCCCQIgECcIog2Q0CCCCAAAKJCBCAE9FiWwQQQAABBFIkQABOESS7QQABBBBAIBEBAnAiWmyLAAIIIIBAigQIwCmCZDcIIIAAAggkIkAATkSLbRFAAAEEEEiRAAE4RZDsBgEEEEAAgUQECMCJaLEtAggggAACKRIgAKcIkt0ggAACCCCQiAABOBEttkUAAQQQQCBFAgTgFEGyGwQQQAABBBIRIAAnosW2CCCAAAIIpEiAAJwiSHaDAAIIIIBAIgIE4ES02BYBBBBAAIEUCRCAUwTJbhBAAAEEEEhEgACciBbbIoAAAgggkCIBAnCKINkNAggggAACiQgQgBPRYlsEEEAAAQRSJEAAThEku0EAAQQQQCARAQJwIlpsiwACCCCAQIoECMApgmQ3CCCAAAIIJCJAAE5Ei20RQAABBBBIkQABOEWQ7AYBBBBAAIFEBAjAiWixLQIIIIAAAikSIACnCJLdIIAAAgggkIgAATgRLbZFAAEEEEAgRQIE4BRBshsEEEAAAQQSEShIZGO2RQABBHJVYNC8CwJxast6jgtEPshE+gUoAaffmCMggAACCCBQTIAAXIyEBQgggAACCKRfgACcfmOOgAACCCCAQDEBAnAxEhYggAACCCCQfgECcPqNOQICCCCAAALFBAjAxUhYgAACCCCAQPoFCMDpN+YICCCAAAIIFBPIueeAR/7p8GIn6d+C7f4dmiMjgAACCARaIGsDcOXKlU2vYmldcIJeYWFhRPaC8uOgsDC4lz3aLALQ55mg5i2o+dLlIm+Jf2lLM9u5c6dVqFAh8R3yicAKBPcvcQyybdu2WVFRUQlbBeeUNm/eHJW/YOSteL6isunjLHlLHB+zxM30iaC6lZYvgm9y1znIn+IecJCvDnlDAAEEEMhZAQJwzl5aTgwBBBBAIMgCBOAgXx3yhgACCCCQswIE4Jy9tJwYAggggECQBQjAQb465A0BBBBAIGcFCMA5e2k5MQQQQACBIAsQgIN8dcgbAggggEDOChCAc/bScmIIIIAAAkEWIAAH+eqQNwQQQACBnBUgAOfspeXEEEAAAQSCLBCMvhGDLJQHeQtKH9W/UAenL+88uPScIgII+ChACdhHfA6NAAIIIJC/AgTg/L32nDkCCCCAgI8CBGAf8Tk0AggggED+ChCA8/fac+YIIIAAAj4KEIB9xOfQCCCAAAL5K0AAzt9rz5kjgAACCPgoQAD2EZ9DI4AAAgjkrwABOH+vPWeOAAIIIOCjAAHYR3wOjQACCCCQvwIE4Py99pw5AggggICPAgRgH/E5NAIIIIBA/goQgPP32nPmCCCAAAI+ChCAfcTn0AgggAAC+SvAaEj5e+2z4swZqSkrLhOZRACBJAQoASeBxkcQQAABBBAorwABuLyCfB4BBBBAAIEkBAjASaDxEQQQQAABBMorQAAuryCfRwABBBBAIAkBAnASaHwEAQQQQACB8goQgMsryOcRQAABBBBIQoAAnAQaH0EAAQQQQKC8AgTg8gryeQQQQAABBJIQIAAngcZHEEAAAQQQKK8AAbi8gnweAQQQQACBJAQIwEmg8REEEEAAAQTKK0AALq8gn0cAAQQQQCAJAQJwEmh8BAEEEEAAgfIKEIDLK8jnEUAAAQQQSEKA4QiTQOMjCEggOEMlbueCIIBAFgpQAs7Ci0aWEUAAAQSyX4AAnP3XkDNAAAEEEMhCAQJwFl40sowAAgggkP0CBODsv4acAQIIIIBAFgpkvBHW4sWL7fnnn4+gOvfcc23FihU2bdq00PIhQ4ZYrVq1QvNMIIBAfALBaRym/NJALL6rxlb5KJDxANyyZUu7+OKLnfXnn39uc+bMsTp16tjcuXOtd+/e1qFDB7eucuXK+Xg9OGcEEEAAgTwRyHgArlixoum1ZcsWmzx5sp1//vmOetmyZdagQQMXiLt27WrhAXjNmjX20EMPRVySs846y2rUqBGxzM2sW118mU9LGjVqFHnkgOQtqPkSFnmL/MrEM5dVZvGcUIa2KeaWoePGOkxQ8xUr36xPXCDjAdjL4nvvvedKuzVr1nSLFJSVND927FgbOXKkVa1a1S3bfffdrU+fPm7a+2fbtm22bt06bzaQ70HNX1DzpYtI3hL/KmOWuFlJ37V6ye0m5Z8q7XoWFham/Fjs0F8B3wLw22+/bbr366Vhw4Z5k/bNN9/Y/PnzTSVhJQXivffeO7ReE9pm69atEct+mfHtlIrlZdOmTVHLgpG3oOZLWOQt6isTx2x2mcVxQhnapLhbhg4c4zBBzVeMbLM6CQFfWkGvX7/eZbVu3brufceOHTZ+/PhQQF25cqU1adIkidPhIwgggAACCGSHgC9FMgXYxo0bh4RU/dy5c2e77777TFXLDRs2JACHdJhAAAEEEMhFAV8CcJs2bUyv8HTQQQdZt27dXAD27v2Gr2caAQQQQACBXBLwpQq6NECVhAm+pemwHAEEEEAglwQCFYBzCZZzQQABBBBAoCwBAnBZOqxDAAEEEEAgTQIE4DTBslsEEEAAAQTKEiAAl6XDOgQQQAABBNIkQABOEyy7RQABBBBAoCwBAnBZOqxDAAEEEEAgTQIE4DTBslsEEEAAAQTKEiAAl6XDOgQQQAABBNIkQABOEyy7RQABBBBAoCwBAnBZOqxDAAEEEEAgTQIE4DTBslsEEEAAAQTKEiAAl6XDOgQQQAABBNIkQABOEyy7RQABBBBAoCwBAnBZOqxDAAEEEEAgTQIE4DTBslsEEEAAAQTKEigoa2X4uvfff9+GDh0avqjY9JgxY6xXr17FlrMAAQQQQAABBCIF4g7Abdq0sVtvvdV9+oEHHrDly5fb73//e9trr73s9ddft0cffdTat28fuXfmEEAAAQQQQKBEgbgDcK1ateyII45wOznrrLNs3rx5VrduXTd/2GGH2Q8//GAzZsyws88+u8QDsRABBBBAAAEEfhVI6h5wpUqVbMWKFb/uZdfU/PnzrX79+hHLmEEAAQQQQACBkgXiLgGHf/yKK66wHj162OGHH25NmjSx6dOnW/Pmzbn/G47ENAIIIIAAAmUIJBWAhwwZYp07d7ZZs2bZmjVr7Prrr7cTTzzRCgqS2l0Z2WMVAggggAACuSmQdMRUAN53331t7dq1Vrt2bYJvbn4/OCsEEEAAgTQJJHUPeMmSJaZSsKqfx48fb8OHD7fRo0enKYvsFgEEEEAAgdwTSCoADx482Fq1amWjRo1yIpdffrk9/vjjtmjRotwT4owQQAABBBBIg0DCAXjnzp326aef2ogRI6ywsNBlSQ2wTjvtNHdPOA15ZJcIIIAAAgjknEDCAbhChQpWvXp199iRp7Fjxw6bMmWKNW7c2FvEOwIIIIAAAgiUIZBUIyx1Odm9e3dr2bKlVa5c2SZMmGAdO3a0E044oYxDsQoBBBBAAAEEPIGkAvDJJ59snTp1sqlTp9q2bdtswIABpq4qSQgggAACCCAQn0BSAVi7bteunXvFdxi2QgABBMxG/unwADFsD1BeyEo+CiR8D1hIb775pvXs2dM6dOgQCsQKyK+88ko+GnLOCCCAAAIIJCyQVAlYAy6ce+65duSRR0Z0wNG6deuEM8AHEEAAAQQQyEeBhAOwHkNav369jRw50tQimoQAAggggAACiQskXAWtoNunTx/TmMBbt25N/Ih8AgEEEEAAAQQs4QAssw0bNriuKOvVq2ft27cPvbgHzDcKAQQQQACB+AQSroLWbg844AAbNGiQNW3aNOIo3AOO4GAGAQQQQACBUgWSCsCqev7LX/5i1apVc8MQaijCLl26lHoQViCAAAIIIIBApEBSVdDXXXedLV682CZNmmQ1a9a0YcOGmfqDfvvttyP3zhwCCCCAAAIIlCiQdAn43XffdYMvzJo1y77++ms79NBDXTAu8SgsRAABBBBAAIEIgaQCsPp9XrlypZ1//vl24403Wrdu3axSpUoRO2YGAQQQQAABBEoXSCoA33777a4faI2ANGfOHDv66KOtV69edthhh1nVqlVLPxprEEAAAQQQQMAJJHUP+Nhjj7U77rjDFixYYHfffbd9+OGHLgi/9NJLsCKAAAIIIIBAHAJJlYDfeecde/nll+3VV191939/+9vf2vPPP+866IjjmGyCAAIIIIBA3gskFYD//ve/W+fOne3mm2+2Qw45xCpWTKogXS58jUNcUFBS9ovKtd9Ufrh4dXww8hbUfMmevCX+DcQscbOSv2vJ7SfVnyp+PX85groBpvvfVGv7u7+SIljMHM2YMcN27NjhSr+ff/65Gws400FY4xAXFZUU0JI6pZjnnMwGW7ZsifpYMPIW1HwJi7xFfWXimMUsDqQSNinuVsJGPiwqLV8EXx8uRpoPmVTRVUFXvWG1adPGDjzwQKtRo4ZNmDAhzVll9wgggAACCOSOQFIBeOjQoda3b1/3KNKaNWvstddes6uvvto1ysodGs4EAQQQQACB9AkkVSeq1s9qgFWlShWXMz1+dM4559jcuXNNzwiTEEAAAQQQQKBsgaRKwJ06dbKPPvooYs9vvPGG1a9fP2IZMwgggAACCCBQskBSJWD1gNW7d2878sgjXR/QKg3Xrl3b+vXrV/JRWIoAAggggAACEQJJlYBPOeUUmzlzpuuCUtXQI0eOtDfffNP0aBAJAQQQQAABBGILJFUC1m67du3qXrEPwRYIIIAAAn4KbN++3Q0hq+6DNZysug6+6qqrXA2mn/nK92MnVQLOdzTOHwEEEMgmgT/84Q/29NNP25///Ge77bbb7K233nLDyIafQ/TzxwrUiaSStt+8eXMiu8i7bQnAeXfJOWEEEMgngfXr19tTTz1ll112mV1yySV24okn2vTp011//nLQY6Xqz6FOnTo2btw4++CDD6xt27ZWvXp10+3GRYsW2apVq9xTL96Y7+oDQoPyrFixwi0fMGCA2/64445zyz777DPXW2LLli2tVatWpuFrScUFkq6CLr4rliCAAAIIBE1g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81yF47wQQAABBBAoj0BSAVjdgX300Ud24IEHho6tJule6+bQQiYQQCDjAvQelnFyDohAUgJJBWA9hqSHrI888kj3wLVKw2o0pa7ESAgggAACCCAQWyCpe8CnnHKKzZw5041QoWpojd2ocRu5fxsbnC0QQAABBBCQQFIBWB/U0FIaFUkjYKh3LO9+sNaREEAAAQRyU+DGG290oxKFd4SkoQjVWZKeiFGBTH03h6f777/fnnzyyfBFoelZs2a5AXm8BWrUq64n9Yjq//7v/7rF6hNa4wd4XRL/9NNPNmjQIO8jWfuedADO2jMm4wgggAACSQvoyRcFwOnTp4f28cQTT7hl6khJfULvu+++oXXq2Ut9/asb4uj0448/2uWXX+76idY6baPRkR5//HFXuNMTN0oarEfB1+vs6dZbb3XDFLqVWfwPATiLLx5ZRwABBPwQOPXUU+3pp592h1bQVGnY6zxJAVWjHGn0I/WcePzxx1v4IAvh+b344ovtyiuvDC1SifeAAw5w+9LISOvWrXO9JWpYQ/V5rppWBW2NS6Ba2GxP5QrAqm5Q15J6JyGAAAII5IdAly5d3Ih26glR47hrFCQvaTQkjXo3YsQIN86vxgXea6+9vNWh94kTJ5qC7D777BNapqEG69atG5pXUFeMueqqq1yJWO/q9OnSSy81dQS1aNGi0LbZOJFUANaoFBrBSMNmjR8/3j1+NHr06Gw8f/KMAAIIIJCggEY1UpfECq66/6uuhKPTl19+6UrAWn7IIYdErF67dq1rQ6QSrUrHiim6F6zBelS97SWNrKTuizU07fXXX28NGjSwFStWuG1uv/12N0RhNgfhpAKwGl1pIIZRo0Y5J1U5qM4+myG8C847AggggEBsgdNOO82VcBVEa9SoUewD6lrYa4ylfiPCk56YueGGG6xevXqm6mXNa0QkjZCnbXUvWdXPKkmHN/C96aabXMlao+jpsVc11nr33XfDd51V0wk/BywYFf317O9jjz3mTrZ58+ami6FfMG3bts0qADKLAAIIIJC4gBpaaWS86667rsQP//vf/3bjuGu76DGrNYbAGWec4T73+eefuzHmDz74YDevsd9POOEE0xC4anHtJVVPa8Q8xRgF5muuucbdHx47dqy3Sda9JxyAVfWgsXrnz58fOllhTJkyxTU/Dy1kAgEEEEAg5wTCg+LChQtD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QCDYAtwDjro+GzdutG+//dbatGkTtcb/WeWroKDAGjRo4H9monKwcOFCa9WqlVWtWjVqjb+zup7fffedtW7d2t+MlHB0Xc/KlSsH7r65srpgwQJnVqVKlRJy7t+in376yVauXGl77bWXf5ko5cjLli2zwsJCq1+/filbsBiBSAECcKQHcwgggAACCGREgCrojDBzEAQQQAABBCIFCMCRHswhgAACCCCQEYGCjBwl4AdZv369Pf7449anTx976qmnXG43b97s7udo5txzz834fboNGzaYnvv98ccfTY8fNW/e3E488USXt+uvv97lTY/96DnNAQMGZDR/ut87Y8YM97hW7dq17bjjjrMmTZq4vOmfe++911q0aGG9e/cOLcvExKuvvmrvv/++VapUyd0rP+CAA0LPTF999dUR96crVqxol19+eSayFXGM2267zc477zxbsWKFPfzwwxZ+j1Vmv/vd7yK2T/eM7ls+8MADEfnQddPzyY899pjtvvvuLgt6/Kdr167WvXv3dGcptIcK0BAAAAkUSURBVP+HHnrIjj/++NB3e8mSJfbee+/ZwIED7fvvv7cnnnjCdE9Y1/LYY4+1/fbbL/TZdE7MmTPH5s6d675j3nHkcuihh7pH3tSPgPKq+/u6V92vXz+XR29b3hHwBAjAuyQUyNatW2ctW7a0kSNHmv7YqCOCq666ynPK6LsC7j333OP+43qNwaZOnWrTp0+3Xr16WYUKFVw+lan58+e7QD106NCM5FF/WF588UX785//bDVq1LCvv/7aJk6c6DouUQMxNZBR/j744AM76qijXDDMSMZ2HeTnn392Qf/AAw90P1oU7Nq1a2dNmzZ1PxbUWYjfae3ate77pmu85557uh93fuZJzyGr8wj9KAhP6sCkcePGNnjwYLdYPwjHjBlj++yzj9WpUyd807RN64exnsv3kswUcJVeeOEF93+hY8eOpryNHj3a2rdvH/Ejy/tcqt/1PVPALenHiH7MqDGifhTr/8O0adPcj/rTTz891dlgfzkgQBV0AC+igppKIF7wVRaPOeYYO+SQQyJy63VKoN6xMpU+/PBDF+QUfJV+85vfmIK/Sp1K77zzjqnkqT9C+nHgV9Ifa+Vpt9128ysLOXVclebUwlfvQUjVqlWzzz77zNUQ6bt45ZVX+p43/YhXT3rqqU41GyqZn3DCCa5F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"
}
],
"prompt_number": 13
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~ggplot2examples/220\"))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~ggplot2examples/220\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 14
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"V. Scatter plots"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's try a scatter, straight from the ggplot2 docs."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"dsamp <- diamonds[sample(nrow(diamonds), 1000), ]\n",
"d <- qplot(carat, price, data=dsamp, colour=clarity)\n",
"py$ggplotly()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~ggplot2examples/42\"))"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~ggplot2examples/42\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"display_html(plotly_iframe(\"https://plot.ly/~MattSundquist/1511\")) # then hide a few series and add a pair of fits. "
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<center><iframe height=\"600\" id=\"igraph\" scrolling=\"no\" seamless=\"seamless\"\n",
"\t\t\t\tsrc=\"https://plot.ly/~MattSundquist/1511\" width=\"750\" frameBorder=\"0\"></iframe></center>"
],
"metadata": {},
"output_type": "display_data"
}
],
"prompt_number": 17
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"VI. Embedding "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<p>Your interactive <a href=\"https://plot.ly/r/embedding-plotly-graphs-in-HTML/\">plots can be embedded in iframes</a> in web pages, blogs, Notebooks, and RPubs (see an <a href=\"http://ropensci.org/blog/2014/04/17/plotly/\">rOpenSci post</a> and accompanying source for instructions on embedding). Plotly is like your combined Instagram and GitHub for plots and data.\n",
"\n",
"Embed your interactive graphs in blogs or websites with this snippet:\n",
"\n",
"<pre style=\"background:#f1f1f1;color:#000\">&lt;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\">\">&lt;/iframe>\n",
"</span></pre>\n",
"\n",
"Here's how it looks in the Washington Post:\n",
"\n",
"<br><a href=\"https://plot.ly/r/embedding-plotly-graphs-in-HTML/\"><img src=\"http://i.imgur.com/XjvtYMr.png\" title=\"Embedding\"/></a><br>"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"VII. Aspirations, roadmap, and getting in touch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"CP Snow, in \"<i>[The Two Cultures](http://en.wikipedia.org/wiki/The_Two_Cultures)</i>\" argues that the divide between sciences and humanities is a vast hindrance to societal advancement and solving problems. Plotly is about solving this problem: making technical tools and plotting available and artistic. Artistry meets technical firepower. Our hope is that by making the platform flexible and encompassing of all technologies and skill-levels, we can create a collaborative space for plotting at any level. Also, pretty graphs are just downright delightful."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can use ggplot2 to make bar, line, and scatter charts. More to come. You can then use Plotly's other tools to make those plus bubble, polar, contour, heatmaps, histograms, boxplots, 3D graphs, and streaming graphs. Or, use Plotly and $LaTeX$. Head over to [our gallery](https://plot.ly/r) to see more examples. "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Get in touch at feedback at plot dot ly, on [GitHub](github.com/ropensci/plotly), or [@plotlygraphs](twitter.com/plotlygraphs).\n",
"<br>\n",
"<br>"
]
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"VIII. IPython installation and use"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<br>\n",
"<br>\n",
"This post is based on an <a href=\"http://nbviewer.ipython.org/gist/msund/403910de45e282d658fa\">IPython Notebook running R</a>. [IPython](ipython.org) is part of [Project Jupyter](https://speakerdeck.com/fperez/project-jupyter), a language agnostic interactive development environment. If you're <i>reading</i> here: \n",
"\n",
">[nbviewer.ipython.org/gist/msund/403910de45e282d658fa](http://nbviewer.ipython.org/gist/msund/403910de45e282d658fa)\n",
"\n",
"you're seeing how <i>coding</i> using an IPython Notebook looks, minus the tools. You get Markdown, a GUI, reproducibility, and a beautiful Notebook (NB) that's easy to publish by posting it on GitHub. Here's what I'm looking at right now: \n",
"<br>\n",
"<br>\n",
"<a href=\"http://nbviewer.ipython.org/gist/msund/403910de45e282d658fa\"><img src=\"http://i.imgur.com/NE9DBBL.png?1\" title=\"NB\" /></a><br>\n",
"\n",
"You can install the IPython NB, R kernel, matplotlib, and ggplot2, from Docker. Docker is a rather mind-blowing Linux container project: \u201cAn open source project to pack, ship and run any application as a lightweight container.\u201d You can build an application, ship it through Docker, and someone else can easily install it and the necessary dependencies. Here\u2019s one for the R kernel, IPython, and matplotlib:\n",
"\n",
"https://github.com/alexander-daniel/IPython-matplotlylib-Dockerfile\n",
"\n",
"And another for the R kernel:\n",
"\n",
"https://github.com/alexander-daniel/IPython-R-Kernel-Plotly-Docker"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# CSS styling within IPython notebook\n",
"display_html(getURL(\"https://raw.githubusercontent.com/plotly/python-user-guide/master/custom.css\"))"
],
"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",
" div.output_subarea.output_html.rendered_html {\n",
" overflow-x: scroll;\n",
" max-width: 100%;\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; */ \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; */ \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": "display_data"
}
],
"prompt_number": 19
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment