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.
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)
plotdata <- read_csv(here("plotdata.csv"))
## Warning: Missing column names filled in: 'X1' [1]
##
## ── 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 group
## 2 2 future control semantic 4.57 2.35 28 0.444 control group
## 3 3 future induction episodic 9.38 3.62 29 0.672 induction group
## 4 4 future induction semantic 4.69 2.85 29 0.530 induction group
## 5 5 past control episodic 11.2 6.67 28 1.26 control group
## 6 6 past control semantic 5.5 5.53 28 1.05 control group
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)
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))
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)
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))
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")
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)
Use ggsave(“nameoffile.png”) to save the last plot as png.
ggsave("plotforpaper.png")
## Saving 7 x 5 in image