Ggplot2: Difference between revisions

From 太極
Jump to navigation Jump to search
Line 6: Line 6:
* [https://leanpub.com/hitchhikers_ggplot2 The Hitchhiker's Guide to Ggplot2 in R]
* [https://leanpub.com/hitchhikers_ggplot2 The Hitchhiker's Guide to Ggplot2 in R]
* [http://ggplot2.org/book/ ggplot2 book] and its [https://github.com/hadley/ggplot2-book source code]. Before I build the (pdf version) of the book, I need to follow [https://github.com/hadley/ggplot2-book/issues/118 this suggestion] by running the following in R before calling '''make'''.
* [http://ggplot2.org/book/ ggplot2 book] and its [https://github.com/hadley/ggplot2-book source code]. Before I build the (pdf version) of the book, I need to follow [https://github.com/hadley/ggplot2-book/issues/118 this suggestion] by running the following in R before calling '''make'''.
* [https://serialmentor.com/dataviz/ Fundamentals of Data Visualization] by Claus O. Wilke. The R code is in the Technical Notes section. The book is interesting. It educates people how to produce an easy to read plot. The FAQs says the figure source code is not available.
* [https://serialmentor.com/dataviz/ Fundamentals of Data Visualization] by Claus O. Wilke. The R code is in the Technical Notes section. The book is interesting. It educates how to produce meaningful and easy to read plots. The FAQs says the figure source code is not available.
* [http://blog.revolutionanalytics.com/2017/09/data-visualization-for-social-science.html Data Visualization for Social Science]  
* [http://blog.revolutionanalytics.com/2017/09/data-visualization-for-social-science.html Data Visualization for Social Science]  
* [https://www.packtpub.com/big-data-and-business-intelligence/r-graph-essentials R Graph Essentials Essentials] by David Lillis. Chapters 3 and 4.
* [https://www.packtpub.com/big-data-and-business-intelligence/r-graph-essentials R Graph Essentials Essentials] by David Lillis. Chapters 3 and 4.

Revision as of 16:42, 1 March 2019

ggplot2

Books

Some examples

Examples from 'R for Data Science' book - Aesthetic mappings

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

# template
ggplot(data = <DATA>) + 
  <GEOM_FUNCTION>(mapping = aes(<MAPPINGS>))

# add another variable through color, size, alpha or shape
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, size = class))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, alpha = class))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, shape = class))

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy), color = "blue")

# add another variable through facets
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class, nrow = 2)

# add another 2 variables through facets
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl)

Examples from 'R for Data Science' book - Geometric objects

# Points
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

# Smoothed
ggplot(data = mpg) + 
  geom_smooth(mapping = aes(x = displ, y = hwy))

# Points + smoother
ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) +
  geom_smooth(mapping = aes(x = displ, y = hwy))

# Colored points + smoother
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) + 
  geom_point(mapping = aes(color = class)) + 
  geom_smooth()

Examples from 'R for Data Science' book - Transformation

# y axis = counts
# bar plot
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut))
# Or
ggplot(data = diamonds) + 
  stat_count(mapping = aes(x = cut))

# y axis = proportion
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, y = ..prop.., group = 1))

# bar plot with 2 variables
ggplot(data = diamonds) + 
  geom_bar(mapping = aes(x = cut, fill = clarity))

ggthemr: Themes for ggplot2

ggedit & ggplotgui – interactive ggplot aesthetic and theme editor

ggconf: Simpler Appearance Modification of 'ggplot2'

https://github.com/caprice-j/ggconf

Plotting individual observations and group means

https://drsimonj.svbtle.com/plotting-individual-observations-and-group-means-with-ggplot2

subplot

Easy way to mix multiple graphs on the same page

x and y labels

https://stackoverflow.com/questions/10438752/adding-x-and-y-axis-labels-in-ggplot2 or the Labels part of the cheatsheet

You can set the labels with xlab() and ylab(), or make it part of the scale_*.* call.

labs(x = "sample size", y = "ngenes (glmnet)")

Legend title

scale_colour_manual("Treatment", values = c("black", "red"))

ylim and xlim in ggplot2

https://stackoverflow.com/questions/3606697/how-to-set-limits-for-axes-in-ggplot2-r-plots or the Zooming part of the cheatsheet

Use one of the following

  • + scale_x_continuous(limits = c(-5000, 5000))
  • + coord_cartesian(xlim = c(-5000, 5000))
  • + xlim(-5000, 5000)

Center title

See the Legends part of the cheatsheet.

ggtitle("MY TITLE") +
  theme(plot.title = element_text(hjust = 0.5))

Time series plot

Multiple lines plot https://stackoverflow.com/questions/14860078/plot-multiple-lines-data-series-each-with-unique-color-in-r

set.seed(45)
nc <- 9
df <- data.frame(x=rep(1:5, nc), val=sample(1:100, 5*nc), 
                   variable=rep(paste0("category", 1:nc), each=5))
# plot
# http://colorbrewer2.org/#type=qualitative&scheme=Paired&n=9
ggplot(data = df, aes(x=x, y=val)) + 
    geom_line(aes(colour=variable)) + 
    scale_colour_manual(values=c("#a6cee3", "#1f78b4", "#b2df8a", "#33a02c", "#fb9a99", "#e31a1c", "#fdbf6f", "#ff7f00", "#cab2d6"))

Versus old fashion

dat <- matrix(runif(40,1,20),ncol=4) # make data
matplot(dat, type = c("b"),pch=1,col = 1:4) #plot
legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend

Github style calendar plot

geom_errorbar(): error bars

set.seed(301)
x <- rnorm(10)
SE <- rnorm(10)
y <- 1:10

par(mfrow=c(2,1))
par(mar=c(0,4,4,4))
xlim <- c(-4, 4)
plot(x[1:5], 1:5, xlim=xlim, ylim=c(0+.1,6-.1), yaxs="i", xaxt = "n", ylab = "", pch = 16, las=1)
mtext("group 1", 4, las = 1, adj = 0, line = 1) # las=text rotation, adj=alignment, line=spacing
par(mar=c(5,4,0,4))
plot(x[6:10], 6:10, xlim=xlim, ylim=c(5+.1,11-.1), yaxs="i", ylab ="", pch = 16, las=1, xlab="")
arrows(x[6:10]-SE[6:10], 6:10, x[6:10]+SE[6:10], 6:10, code=3, angle=90, length=0)
mtext("group 2", 4, las = 1, adj = 0, line = 1)

Stklnpt.svg

text labels on scatterplots: ggrepel package

ggrepel package. Found on Some datasets for teaching data science by Rafael Irizarry.

graphics::smoothScatter

smoothScatter with ggplot2

BBC

Add your brand to ggplot graph

You Need to Start Branding Your Graphs. Here's How, with ggplot!