Created
April 16, 2014 07:02
-
-
Save msund/10820797 to your computer and use it in GitHub Desktop.
Ggplots
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Make your ggplots shareable, collaborative, and with D3 | |
======================================================== | |
[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]()). If you're running this from the source, it opens all the graphs at once. It's pretty fun. | |
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! | |
```{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) | |
``` | |
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. | |
```{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) | |
} | |
``` | |
1.4 Lines | |
--------------------- | |
Or, take `ggplotly` for a spin with the organge dataset: | |
```{r, fig.width=15, tidy=FALSE, fig.align='center', plotly=TRUE} | |
{ | |
(orange <- qplot(age, circumference, data = Orange, colour = Tree, geom = "line")) | |
py$ggplotly(orange) | |
} | |
``` | |
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)) + | |
geom_point(alpha=0.1)) | |
py$ggplotly(PrettyPlot) | |
} | |
``` | |
1.6 Functions | |
--------------------- | |
Want to [draw functions](http://stackoverflow.com/questions/1853703/plotting-functions-in-r) with `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) | |
} | |
``` | |
# 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). | |
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). The project was inspired by Hadley Wickham's work and the elegance and precision of `ggplot2`. We welcome your thoughts, issues, and pull requests. | |
# 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), ] | |
``` | |
Inverse gray. | |
```{r, fig.width=15, tidy=FALSE, plotly=TRUE} | |
{ | |
(gray <- (qplot(carat, price, data = dsamp, colour = cut) + theme_igray())) | |
py$ggplotly(gray) | |
} | |
``` | |
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) | |
} | |
``` | |
[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) | |
} | |
``` |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment