Last active — forked from msund/Ggplots

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist
View Ggplots.Rmd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215
---
name: ggplotly
layout: post
title: Make your ggplots shareable, collaborative, and with D3
date: 2014-04-17
author: Matt Sundquist
authorurl: https://plot.ly/team
tags:
- R
- API
- plotly
- ggplot2
- data
- maps
---
 
[Ggplotly](https://github.com/ropensci/plotly) and [Plotly's R API](https://plot.ly/api/r) let you make ggplot2 plots, add `py$ggplotly()`, and make your plots interactive, online, and drawn with D3. Let's make some.
 
 
```{r echo=FALSE}
options(bitmapType="cairo")
#see: http://cran.r-project.org/web/packages/opencpu/NEWS
library("knitr")
```
 
## 1. Getting Started and Examples
 
Here is Fisher's iris data.
 
```{r}
library("ggplot2")
ggiris <- qplot(Petal.Width, Sepal.Length, data=iris, color=Species)
print(ggiris)
```
 
Let's make it in Plotly. Install:
 
```{r, eval=FALSE}
install.packages("devtools")
library("devtools")
install_github("plotly", "ropensci")
```
 
Load.
 
```{r}
library("plotly")
```
 
Sign up [online](https://plot.ly), use our public keys below, or sign up like this:
 
```{r, eval=FALSE}
signup("new_username", "your_email@domain.com")
```
 
That should have responded with your new key. Use that to create a plotly interface object, or use ours:
 
```{r, eval=TRUE}
py <- plotly("RgraphingAPI", "ektgzomjbx")
```
 
It just works.
 
```{r, plotly=TRUE}
py$ggplotly(ggiris)
```
 
The call opens a browser tab. Or in an `.Rmd` document, the plot is embedded if you specify the `plotly=TRUE` chunk option (see [source](https://gist.github.com/msund/10820797)). If you're running this from the source, it makes all the graphs at once in your browser. Reaction my first time: here be dragons.
 
If you click the _data and graph_ link in the embed, it takes you to Plotly's GUI, where you can edit the graph, see the data, and share your plot with collaborators.
 
<br><br>
 
### 1.2 Maps
 
Next: Maps!
 
```{r, fig.width=15, tidy=FALSE, fig.align='center', frameBorder="0"}
data(canada.cities, package="maps")
viz <- ggplot(canada.cities, aes(long, lat)) +
borders(regions="canada", name="borders") +
coord_equal() +
geom_point(aes(text=name, size=pop), colour="red", alpha=1/2, name="cities")
```
 
Call Plotly.
 
```{r, plotly=TRUE}
py$ggplotly(viz)
```
 
<br><br>
 
### 1.3 Scatter
 
Want to make a scatter and add a [smoothed conditional mean](http://docs.ggplot2.org/current/geom_smooth.html)? Here's how to do it in Plotly. For the rest of the plots, we'll just print the Plotly version to save space. You can hover on text to get data, or click and drag across a section to zoom in.
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE}
model <- lm(mpg ~ wt + factor(cyl), data=mtcars)
grid <- with(mtcars, expand.grid(
wt = seq(min(wt), max(wt), length = 20),
cyl = levels(factor(cyl))
))
 
grid$mpg <- stats::predict(model, newdata=grid)
 
viz2 <- qplot(wt, mpg, data=mtcars, colour=factor(cyl)) + geom_line(data=grid)
py$ggplotly(viz2)
```
 
<br><br>
 
### 1.4 Lines
 
Or, take `ggplotly` for a spin with the orange dataset:
 
```{r, fig.width=15, fig.align='center', tidy=FALSE, plotly=TRUE}
orange <- qplot(age, circumference, data = Orange, colour = Tree, geom = "line")
py$ggplotly(orange)
```
 
<br><br>
 
### 1.5 Alpha blend
 
Or, make plots [beautiful](http://mandymejia.wordpress.com/2013/11/13/10-reasons-to-switch-to-ggplot-7/).
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE, cache.lazy=TRUE}
prettyPlot <- ggplot(data=diamonds, aes(x=carat, y=price, colour=clarity))
prettyPlot <- prettyPlot + geom_point(alpha = 1/10)
py$ggplotly(prettyPlot)
```
 
<br><br>
 
### 1.6 Functions
 
Want to [draw functions](http://stackoverflow.com/questions/1853703/plotting-functions-in-r) with a `curve`?
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE}
eq <- function(x) {x*x}
tmp <- data.frame(x=1:50, y=eq(1:50))
 
# Make plot object
p <- qplot(x, y, data=tmp, xlab="X-axis", ylab="Y-axis")
c <- stat_function(fun=eq)
 
py$ggplotly(p + c)
```
 
<br><br>
 
## 2. A GitHub for data and graphs
 
Like we might work together on code on GitHub or a project in a Google Doc, we can edit graphs and data together on Plotly. Here's how it works:
 
- Your URL is shareable.
- Public use is free.
- You can set [the privacy](http://plot.ly/api/r/docs/privacy) of your graph.
- You can edit and add to plots from our GUI or with R or [APIs](https://plot.ly/api) for Python, MATLA, Julia, Perl, Arduino, Raspberry Pi, and REST.
- You get a profile of graphs, like [Rhett Allain](https://plot.ly/~RhettAllain/) from Wired Science.
- You can [embed interactive graphs in iframes](http://plot.ly/api/r/docs/iframes).
 
<br><br>
 
### 2.1 Inspiration and team
 
Plotly's API is part of `[rOpenSci](ropensci.org)`, being developed by the brilliant [Toby Hocking](http://cbio.ensmp.fr/~thocking/), and on [GitHub](https://github.com/ropensci/plotly). Your thoughts, issues, and pull requests are welcome. Right now, you can make scatter and line plots; let us know what you'd like to see next.
 
The project was inspired by [Hadley Wickham](https://github.com/hadley/) and the elegance and precision of [`ggplot2`](http://ggplot2.org/). Thanks to [Scott Chamberlain](scottchamberlain.info), [Joe Cheng](https://github.com/jcheng5), and [Elizabeth Morrison-Wells](https://twitter.com/efvmw) for their help.
 
<br><br>
 
## 3. ggthemes and Plotly
 
Using [`ggthemes`](https://github.com/jrnold/ggthemes) opens up another set of custom graph filters for styling your graphs. To get started, you'll want to install `ggthemes`.
 
```{r eval=FALSE}
library("devtools")
install_github("ggthemes", "jrnold")
```
 
and load your data.
 
```{r}
library("ggplot2")
library("ggthemes")
dsamp <- diamonds[sample(nrow(diamonds), 1000),]
```
<br><br>
Inverse gray.
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE}
gray <- (qplot(carat, price, data = dsamp, colour = cut) +
theme_igray())
py$ggplotly(gray)
```
<br><br>
The Tableau scale.
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE}
tableau <- (qplot(carat, price, data = dsamp, colour = cut) +
theme_igray() +
scale_colour_tableau())
py$ggplotly(tableau)
```
<br><br>
[Stephen Few's](http://www.perceptualedge.com/articles/visual_business_intelligence/rules_for_using_color.pdf) scale.
 
```{r, fig.width=15, tidy=FALSE, plotly=TRUE}
few <- (qplot(carat, price, data = dsamp, colour = cut) +
theme_few() +
scale_colour_few())
py$ggplotly(few)
```
View Ggplots.Rmd

name: ggplotly layout: post title: Make your ggplots shareable, collaborative, and with D3 date: 2014-04-17 author: Matt Sundquist authorurl: https://plot.ly/team tags:

  • R
  • API
  • plotly
  • ggplot2
  • data

- maps

Ggplotly and Plotly's R API let you make ggplot2 plots, add py$ggplotly(), and make your plots interactive, online, and drawn with D3. Let's make some.

1. Getting Started and Examples

Here is Fisher's iris data.

library("ggplot2")
ggiris <- qplot(Petal.Width, Sepal.Length, data = iris, color = Species)
print(ggiris)

Let's make it in Plotly. Install:

install.packages("devtools")
library("devtools")
install_github("plotly", "ropensci")

Load.

library("plotly")
## Loading required package: RCurl
## Loading required package: bitops
## Loading required package: RJSONIO

Sign up online, use our public keys below, or sign up like this:

signup("new_username", "your_email@domain.com")

That should have responded with your new key. Use that to create a plotly interface object, or use ours:

py <- plotly("RgraphingAPI", "ektgzomjbx")

It just works.

py$ggplotly(ggiris)

The call opens a browser tab. Or in an .Rmd document, the plot is embedded if you specify the plotly=TRUE chunk option (see source). If you're running this from the source, it makes all the graphs at once in your browser. Reaction my first time: here be dragons.

If you click the data and graph link in the embed, it takes you to Plotly's GUI, where you can edit the graph, see the data, and share your plot with collaborators.



1.2 Maps

Next: Maps!

data(canada.cities, package="maps")
viz <- ggplot(canada.cities, aes(long, lat)) +
  borders(regions="canada", name="borders") +
  coord_equal() +
  geom_point(aes(text=name, size=pop), colour="red", alpha=1/2, name="cities")

Call Plotly.

py$ggplotly(viz)



1.3 Scatter

Want to make a scatter and add a smoothed conditional mean? Here's how to do it in Plotly. For the rest of the plots, we'll just print the Plotly version to save space. You can hover on text to get data, or click and drag across a section to zoom in.

model <- lm(mpg ~ wt + factor(cyl), data=mtcars)
grid <- with(mtcars, expand.grid(
  wt = seq(min(wt), max(wt), length = 20),
  cyl = levels(factor(cyl))
))

grid$mpg <- stats::predict(model, newdata=grid)

viz2 <- qplot(wt, mpg, data=mtcars, colour=factor(cyl)) + geom_line(data=grid)
py$ggplotly(viz2)



1.4 Lines

Or, take ggplotly for a spin with the orange dataset:

orange <- qplot(age, circumference, data = Orange, colour = Tree, geom = "line")
py$ggplotly(orange)



1.5 Alpha blend

Or, make plots beautiful.

prettyPlot <- ggplot(data=diamonds, aes(x=carat, y=price, colour=clarity))
prettyPlot <- prettyPlot + geom_point(alpha = 1/10)
py$ggplotly(prettyPlot)



1.6 Functions

Want to draw functions with a curve?

eq <- function(x) {x*x}
tmp <- data.frame(x=1:50, y=eq(1:50))

# Make plot object
p <- qplot(x, y, data=tmp, xlab="X-axis", ylab="Y-axis")
c <- stat_function(fun=eq)

py$ggplotly(p + c)



2. A GitHub for data and graphs

Like we might work together on code on GitHub or a project in a Google Doc, we can edit graphs and data together on Plotly. Here's how it works:

  • Your URL is shareable.
  • Public use is free.
  • You can set the privacy of your graph.
  • You can edit and add to plots from our GUI or with R or APIs for Python, MATLA, Julia, Perl, Arduino, Raspberry Pi, and REST.
  • You get a profile of graphs, like Rhett Allain from Wired Science.
  • You can embed interactive graphs in iframes.



2.1 Inspiration and team

Plotly's API is part of [rOpenSci](ropensci.org), being developed by the brilliant Toby Hocking, and on GitHub. Your thoughts, issues, and pull requests are welcome. Right now, you can make scatter and line plots; let us know what you'd like to see next.

The project was inspired by Hadley Wickham and the elegance and precision of ggplot2. Thanks to Scott Chamberlain, Joe Cheng, and Elizabeth Morrison-Wells for their help.



3. ggthemes and Plotly

Using ggthemes opens up another set of custom graph filters for styling your graphs. To get started, you'll want to install ggthemes.

library("devtools")
install_github("ggthemes", "jrnold")

and load your data.

library("ggplot2")
library("ggthemes")
dsamp <- diamonds[sample(nrow(diamonds), 1000), ]



Inverse gray.

gray <- (qplot(carat, price, data = dsamp, colour = cut) + 
           theme_igray())
py$ggplotly(gray)



The Tableau scale.

tableau <- (qplot(carat, price, data = dsamp, colour = cut) + 
              theme_igray() + 
              scale_colour_tableau())
py$ggplotly(tableau)



Stephen Few's scale.

few <- (qplot(carat, price, data = dsamp, colour = cut) + 
          theme_few() + 
          scale_colour_few())
py$ggplotly(few)

Curious,how come plot.ly doesn't support geom_smooth? Seems pretty basic.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.