Ggplot2: Difference between revisions

From 太極
Jump to navigation Jump to search
Line 100: Line 100:
* [https://rpkgs.datanovia.com/ggpubr/index.html ggpubr] package which was used by [https://cran.r-project.org/web/packages/survminer/index.html survminer]. The colors c("#00AFBB", "#FC4E07") are very similar to the colors used in [https://rpkgs.datanovia.com/survminer/index.html ggsurvplot()]. Colorblind-friendly palette
* [https://rpkgs.datanovia.com/ggpubr/index.html ggpubr] package which was used by [https://cran.r-project.org/web/packages/survminer/index.html survminer]. The colors c("#00AFBB", "#FC4E07") are very similar to the colors used in [https://rpkgs.datanovia.com/survminer/index.html ggsurvplot()]. Colorblind-friendly palette


== Emulate ggplot2 default color palette ==
== scales packages - ggplot2 default color palette ==
[https://stackoverflow.com/questions/8197559/emulate-ggplot2-default-color-palette Emulate ggplot2 default color palette]
[https://stackoverflow.com/questions/8197559/emulate-ggplot2-default-color-palette Emulate ggplot2 default color palette]


Line 118: Line 118:


'''Answer 2''' (better, it shows the color values in HEX). It should be read from left to right and then top to down.
'''Answer 2''' (better, it shows the color values in HEX). It should be read from left to right and then top to down.
[https://scales.r-lib.org/ scales] package
<syntaxhighlight lang='rsplus'>
<syntaxhighlight lang='rsplus'>
library(scales)
library(scales)

Revision as of 15:30, 12 April 2019

ggplot2

Books

Tutorials

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))

Color palette

scales packages - ggplot2 default color palette

Emulate ggplot2 default color palette

Answer 1

gg_color_hue <- function(n) {
  hues = seq(15, 375, length = n + 1)
  hcl(h = hues, l = 65, c = 100)[1:n]
}

n = 4
cols = gg_color_hue(n)

dev.new(width = 4, height = 4)
plot(1:n, pch = 16, cex = 2, col = cols)

Answer 2 (better, it shows the color values in HEX). It should be read from left to right and then top to down.

scales package

library(scales)
show_col(hue_pal()(4))

Class variables

"Set1" is a good choice. See RColorBrewer::display.brewer.all()

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.

Fonts

Adding Custom Fonts to ggplot in R

graphics::smoothScatter

smoothScatter with ggplot2

BBC

Add your brand to ggplot graph

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