apa figures

As I write my first paper reporting data analysis coming out of R (woot!!!), here are some notes summarising all the googling I have done this morning about how to produce APA style figures in ggplot.

via GIPHY


Load libraries

Start by loading tidyverse to get ggplot, here to make finding the data easy, and papaja to get the theme_apa() function.

library(tidyverse)
library(here)
library(papaja)

Read in data

plotdata <- read_csv(here("plotdata.csv"))
## Warning: Missing column names filled in: 'X1' [1]
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   direction = col_character(),
##   group = col_character(),
##   detailtype = col_character(),
##   mean = col_double(),
##   stdev = col_double(),
##   n = col_double(),
##   stderr = col_double(),
##   groupnew = col_character()
## )
head(plotdata)
## # A tibble: 6 x 9
##      X1 direction group    detailtype  mean stdev     n stderr groupnew    
##   <dbl> <chr>     <chr>    <chr>      <dbl> <dbl> <dbl>  <dbl> <chr>       
## 1     1 future    control  episodic    9.46  4.04    28  0.764 control gro…
## 2     2 future    control  semantic    4.57  2.35    28  0.444 control gro…
## 3     3 future    inducti… episodic    9.38  3.62    29  0.672 induction g…
## 4     4 future    inducti… semantic    4.69  2.85    29  0.530 induction g…
## 5     5 past      control  episodic   11.2   6.67    28  1.26  control gro…
## 6     6 past      control  semantic    5.5   5.53    28  1.05  control gro…

Basic ggplot (columns)

Plot separate bars for episodic vs semantic details, by past and future events, separately for kids in the control group vs. induction group. Get pairs of columns using position = “dodge”.

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew)

Add error bars

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew) + geom_errorbar(aes(ymin=mean-stderr, ymax=mean+stderr),
                  size=.3,    # Thinner lines
                    width=.2,
                      position=position_dodge(.9))

APA-ise

The theme_apa() from the pajaja package does most of the APAising. Gets rid of the grey and gridlines. But for some reason, now the bars are floating.

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew) + geom_errorbar(aes(ymin=mean-stderr, ymax=mean+stderr),
                  size=.3,    # Thinner lines
                    width=.2,
                      position=position_dodge(.9)) +
  theme_apa(base_size = 14)

Fix x and y axis

Extend y axis scale and make the bars sit on the x axis

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew) + geom_errorbar(aes(ymin=mean-stderr, ymax=mean+stderr),
                  size=.3,    # Thinner lines
                    width=.2,
                      position=position_dodge(.9)) +
  theme_apa(base_size = 14) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 15))

Fix axis labels

Use the \n notation to break a label or title across two lines

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew) + geom_errorbar(aes(ymin=mean-stderr, ymax=mean+stderr),
                  size=.3,    # Thinner lines
                    width=.2,
                      position=position_dodge(.9)) +
  theme_apa(base_size = 14) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 15)) +
   labs(x="Detail type", y="Mean number of details \n produced")

Make grey scale

Use scale_fill_grey(), values 1 = white and 0 = black, specify values in between to get shades of grey

plotdata %>%
  ggplot(aes(x= detailtype, y = mean, fill = direction)) +
    geom_col(position = "dodge") +
  facet_wrap(~ groupnew) + geom_errorbar(aes(ymin=mean-stderr, ymax=mean+stderr),
                  size=.3,    # Thinner lines
                    width=.2,
                      position=position_dodge(.9)) +
  theme_apa(base_size = 14) +
  scale_y_continuous(expand = c(0, 0), limits = c(0, 15)) +
   labs(x="Detail type", y="Mean number of details \n produced") +
  scale_fill_grey(start = 0.40, end = 0.6) 

Save as png to add to your paper

Use ggsave(“nameoffile.png”) to save the last plot as png.

ggsave("plotforpaper.png")
## Saving 7 x 5 in image