ggplots are layered compositions of these various components. To add components to the plot we simply add them with a “+”
p1 <- ggplot(data= <DATA>,mapping=aes(<MAPPINGS>) + 
<GEOM_FUNCTION>(aes(<MAPPINGS>),
                stat=<STAT>,
                position=<POSITION>) +
                <COORDINATE_FUNCTION> +
                <FACET_FUNCTION>
print(p1)
ggsave(plot=p1, filename="MyPlot",width=5,height=3,units="in",device="svg")
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6      ✔ purrr   0.3.4 
## ✔ tibble  3.1.8      ✔ dplyr   1.0.10
## ✔ tidyr   1.2.1      ✔ stringr 1.4.1 
## ✔ readr   2.1.2      ✔ forcats 0.5.2 
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(ggplot2) 
library(ggthemes) #extended themes for ggplot
library(patchwork) #tools for composing multiple panels
For these examples we will use the mpg built in data set
from ggplot2
?mpg
qplot# simple histogram
qplot(x=mpg$cty) #y-axis is count of observation with a given value of the x
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
We can modify the colors:
qplot(x=mpg$cty,fill=I("goldenrod"),color=I("black")) 
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Here we used I() because if we directly call the color
name, R will look for a variable with that name and attempt to apply
colors based on the values of the variable.
# simple density plot
qplot(x=mpg$hwy,geom="density")
# simple scatter plot with linear regression line
qplot(x=mpg$cty,y=mpg$hwy,geom=c("point","smooth"), method="lm")
## `geom_smooth()` using formula 'y ~ x'
We can color points by a variable
qplot(x=mpg$cty,y=mpg$hwy, col = mpg$class, geom=c("point"))
# The regression is now applied to each class separately
qplot(x=mpg$cty,y=mpg$hwy, col = mpg$class, geom=c("point","smooth"), method="lm")
## `geom_smooth()` using formula 'y ~ x'
# basic boxplot
qplot(x=mpg$fl, y=mpg$cty,geom="boxplot",fill=I("green")) 
Interpretation:
Interquartile range (IQR)
# simple barplot 
qplot(x=mpg$fl,geom="bar")
Most often bar charts are used to display summary values by group.
One way to do this is to use dplyr to calculate summary
stats and plot those with col
# bar plot with specified means
mpg_summary<-mpg %>%
  group_by(class) %>%
  summarise(mean_hwy = mean(hwy))
p<-qplot(x=mpg_summary$class, y=mpg_summary$mean_hwy, geom="col")
p
We can flip this plot by layering coord_flip:
p + coord_flip()
ggplotsp1 <- ggplot(data=mpg, mapping=aes(x=hwy,y=cty)) +
  geom_point()
print(p1)
Now that we have created the plot object p1 we can layer
elements and themes onto it
 p1 + theme_bw() #clean with gridlines
p1 + theme_classic() # no grid lines
p1 + theme_dark() # good for brightly colored points
 p1 + theme_void() # shows data only
If you must:
 p1 + theme_excel()
 # use theme parameters to modify font and font size. 
 p1 + theme_classic(base_size=25,base_family="sans")
base_<XXX> modifies throughout the figure. You can
also control specific elements:
p1 + labs(x="Highway Gas Milage (mpg)") + # replace the default label on the y-axis
  theme_classic() +
  theme(axis.title.x = element_text(size = 15, angle = 45, vjust = 0.5)) # specifically change font size, angle, and position of x-axis label
p1 <- ggplot(data=mpg) +
  aes(x=hwy,y=cty) + 
  geom_point(size=7,
             shape=25,
             color="black",
             fill="hotpink") +
  labs(title="My graph title here",
       subtitle="An extended subtitle that will print below the main title",
       x="My x axis label",
       y="My y axis label") +
  xlim(0,50) +
  ylim(0,50)
      
p1
Shape options for points
A convenient document with base colors can be found here
colors() # will return a list of all colors in base R
Lesson developed with materials adapted from: https://gotellilab.github.io/Bio381/