Boxplot with total, large thalli, and small thalli density at my four field sites.

Text size is for presentation

rm(list=ls()) 

library(ggplot2)
library(ggpubr)
library(scales)
library(lubridate)
library(readr)
library(dplyr)
library(chron)
library(plotly)
library(dplyr)
library(wesanderson)
## Warning: package 'wesanderson' was built under R version 4.0.4

Setting up data

#read in dat
alldata<-read.csv(
      "https://raw.githubusercontent.com/Cmwegener/thesis/master/data/field/CB_field_data_plus.csv",
    header = TRUE
  )

#Format data
alldata$date<-as.Date(alldata$date, format = c("%m/%d/%Y"))
alldata$no.fuc.q<-as.integer(alldata$no.fuc.q)
alldata$no.large.fuc.q<-as.integer(alldata$no.large.fuc.q)
alldata$no.small.fuc.q<-as.integer(alldata$no.small.fuc.q)

I’ve been subsetting the data by site before graphing

HS<-subset(alldata, alldata$site.old == "HS")
BY<-subset(alldata, alldata$site.old == "BY")
ND<-subset(alldata, alldata$site.old == "ND")
PC<-subset(alldata, alldata$site.old == "PC")

Graph total density

HStot <-
  ggplot(data = HS,
         mapping = aes(x = date, y = no.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Horseshoe Bay") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

BYtot <-
  ggplot(data = BY,
         mapping = aes(x = date, y = no.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Brickyard Park") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

NDtot <-
  ggplot(data = ND,
         mapping = aes(x = date, y = no.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Point Chauncy") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

PCtot <-
  ggplot(data = PC,
         mapping = aes(x = date, y = no.fuc.q, group = date))+
  geom_boxplot(alpha=0.3) + 
  ggtitle("Paradise Cay")+
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") +
  theme(plot.title = element_text(size = 20, face = "plain")) + geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  )+
  ylab(" ") + xlab(" ") +
  theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

total <- ggarrange(PCtot, NDtot, BYtot, HStot, ncol = 4, nrow = 1)
## Warning: Removed 20 rows containing non-finite values (stat_boxplot).
## Warning: Removed 20 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing non-finite values (stat_boxplot).
## Warning: Removed 10 rows containing missing values (geom_point).
total.fig <- annotate_figure(
  total,
  left = text_grob(
    "Total Density (Thalli/0.25m^2)",
    color = "black",
    rot = 90,
    face="bold",
    size = 25
  )
)

total.fig

Graph large thalli

HSl <-
  ggplot(data = HS,
         mapping = aes(x = date, y = no.large.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Horseshoe Bay") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

BYl <-
  ggplot(data = BY,
         mapping = aes(x = date, y = no.large.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Brickyard Park") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

NDl <-
  ggplot(data = ND,
         mapping = aes(x = date, y = no.large.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Point Chauncy") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

PCl <-
  ggplot(data = PC,
         mapping = aes(x = date, y = no.large.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Paradise Cay") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )


large<-ggarrange(PCl, NDl, BYl, HSl, ncol = 4, nrow = 1)
## Warning: Removed 30 rows containing non-finite values (stat_boxplot).
## Warning: Removed 30 rows containing missing values (geom_point).
## Warning: Removed 20 rows containing non-finite values (stat_boxplot).
## Warning: Removed 20 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing non-finite values (stat_boxplot).
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing non-finite values (stat_boxplot).
## Warning: Removed 10 rows containing missing values (geom_point).
large.fig <- annotate_figure(
  large,
  left = text_grob(
    "Large Thalli Density (Thalli/0.25m^2)",
    color = "black",
    rot = 90,
    face="bold",
    size = 25
  )
)

large.fig

Graph small thalli

HSs <-
  ggplot(data = HS,
         mapping = aes(x = date, y = no.small.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Horseshoe Bay") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

BYs <-
  ggplot(data = BY,
         mapping = aes(x = date, y = no.small.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Brickyard Park") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

NDs <-
  ggplot(data = ND,
         mapping = aes(x = date, y = no.small.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Point Chauncy") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

PCs <-
  ggplot(data = PC,
         mapping = aes(x = date, y = no.small.fuc.q, group = date)) + geom_boxplot(alpha=0.3) + ggtitle("Paradise Cay") +
  scale_x_date(date_breaks = "2 month", date_labels = "%b %Y") + theme(plot.title = element_text(size = 20, face = "plain")) +
  geom_jitter(position=position_jitter(0.5),
              size=1,
              alpha = 0.3)+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

small<-ggarrange(PCs, NDs, BYs, HSs, ncol = 4, nrow = 1)
## Warning: Removed 30 rows containing non-finite values (stat_boxplot).
## Warning: Removed 30 rows containing missing values (geom_point).
## Warning: Removed 20 rows containing non-finite values (stat_boxplot).
## Warning: Removed 20 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing non-finite values (stat_boxplot).
## Warning: Removed 10 rows containing missing values (geom_point).
## Warning: Removed 10 rows containing non-finite values (stat_boxplot).
## Warning: Removed 10 rows containing missing values (geom_point).
small.fig <- annotate_figure(
  small,
  left = text_grob(
    "Small Thalli Density (Thalli/0.25m^2)",
    color = "black",
    rot = 90,
    face="bold",
    size = 25
  )
)

small.fig

Put it all together

ggarrange(total.fig, large.fig, small.fig, ncol = 1, nrow = 3)

NOTE: Horseshoe Bay has a different y-axis scale for each graph so that you can see the pattern

####Percent density (large vs small thalli)####

Df in the wrong format to do stacked percent table. Going to convert. Converting: https://stackoverflow.com/questions/29719701/stacked-bar-plot-with-percentages-in-separate-columns Graph: https://www.r-graph-gallery.com/48-grouped-barplot-with-ggplot2.html

#selected needed columns
HS.density<-data.frame(HS$date, HS$no.large.fuc.q, HS$no.small.fuc.q)
BY.density<-data.frame(BY$date, BY$no.large.fuc.q, BY$no.small.fuc.q)
ND.density<-data.frame(ND$date, ND$no.large.fuc.q, ND$no.small.fuc.q)
PC.density<-data.frame(PC$date, PC$no.large.fuc.q, PC$no.small.fuc.q)

#reshape df
library(reshape2)
HS.long<- melt(HS.density, id = "HS.date")
BY.long<- melt(BY.density, id = "BY.date")
ND.long<- melt(ND.density, id = "ND.date")
PC.long<- melt(PC.density, id = "PC.date")


#remame columns
names(HS.long)[1] <- "date"
names(HS.long)[2] <- "thalli.size"
names(HS.long)[3] <- "density"

names(BY.long)[1] <- "date"
names(BY.long)[2] <- "thalli.size"
names(BY.long)[3] <- "density"

names(ND.long)[1] <- "date"
names(ND.long)[2] <- "thalli.size"
names(ND.long)[3] <- "density"

names(PC.long)[1] <- "date"
names(PC.long)[2] <- "thalli.size"
names(PC.long)[3] <- "density"

#test graph- basic
ggplot(HS.long, aes(x = date, y = density, fill = thalli.size)) + 
  geom_bar(position="fill", stat = "identity")
## Warning: Removed 20 rows containing missing values (position_stack).

Graph

HS.graph <-
  ggplot(data = HS.long,
         mapping = aes(x = date, y = density, fill = thalli.size)) + 
  geom_bar(position = "fill", stat = "identity") +
  scale_fill_manual(values=wes_palette(n=2, name="Moonrise1"))+
  scale_y_continuous(labels = scales::percent)+
  ggtitle("Horseshoe Bay") +
  scale_x_date(date_breaks = "2 month", 
               date_labels = "%b %Y") + 
  theme(plot.title = element_text(size = 20, face = "plain")) +
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

BY.graph <-
  ggplot(data = BY.long,
         mapping = aes(x = date, 
                       y = density, 
                       fill=thalli.size)) + 
  geom_bar(position="fill",
           stat="identity") + 
  scale_fill_manual(values=wes_palette(n=2, name="Moonrise1"))+
  scale_y_continuous(labels = scales::percent)+
  ggtitle("Brickyard Park") +
  scale_x_date(date_breaks = "2 month", 
               date_labels = "%b %Y") + 
  theme(plot.title = element_text(size = 20, face = "plain"))+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

ND.graph <-
  ggplot(data = ND.long,
         mapping = aes(x = date, 
                       y = density, 
                       fill=thalli.size)) + 
  geom_bar(position="fill",
           stat="identity") +
  scale_fill_manual(values=wes_palette(n=2, name="Moonrise1"))+ 
  scale_y_continuous(labels = scales::percent)+
  ggtitle("Point Chauncy") +
  scale_x_date(date_breaks = "2 month", 
               date_labels = "%b %Y") + 
  theme(plot.title = element_text(size = 20, face = "plain"))+
  theme(
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

PC.graph <-
  ggplot(data = PC.long,
         mapping = aes(x = date, 
                       y = density, 
                       fill=thalli.size)) + 
  geom_bar(position="fill",
           stat="identity") +
  scale_fill_manual(values=wes_palette(n=2, name="Moonrise1"), 
                       name="Thalli Size",
                       breaks=c("PC.no.large.fuc.q", "PC.no.small.fuc.q"),
                       labels=c("Large Thalli", "Small Thalli"))+
  scale_y_continuous(labels = scales::percent)+
  ggtitle("Paradise Cay") +
  scale_x_date(date_breaks = "2 month", 
               date_labels = "%b %Y") + 
  theme(plot.title = element_text(size = 20, face = "plain"))+
  theme(
    legend.title = element_text(size = 15, face = "bold"),
              legend.position="bottom",
    axis.text.x = element_text(angle = 60, hjust = 1),
    axis.text = element_text(size = 20),
    axis.title = element_text(size = 20, face = "plain")
  ) + ylab(" ") + xlab(" ") + theme(
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(),
    panel.background = element_blank(),
    axis.line = element_line(colour = "black")
  )

freq<-ggarrange(PC.graph, ND.graph, BY.graph, HS.graph, ncol = 4, nrow = 1, common.legend = TRUE)
## Warning: Removed 60 rows containing missing values (position_stack).

## Warning: Removed 60 rows containing missing values (position_stack).
## Warning: Removed 40 rows containing missing values (position_stack).
## Warning: Removed 20 rows containing missing values (position_stack).

## Warning: Removed 20 rows containing missing values (position_stack).
freq.fig <- annotate_figure(
  freq,
  left = text_grob(
    "Percent of total density",
    color = "black",
    rot = 90,
    face="bold",
    size = 25
  )
)

freq.fig

Don’t like the colors- try black and white
Legend needs work
Add horizontal line at 50%

http://www.cookbook-r.com/Graphs/Legends_(ggplot2)/