It’s the second day of January 2021, and a fitting time to be making resolutions. It’s also the time to look back at commitments made at the start of last year and check in on how they went. A lot of plans went awry in 2020, but staying home made it easier for me to stick to my resolution to eat less meat because I was doing a lot more meal planning. The result was I only ate meat on 35% of days, which was better than my original aspiration to cut it down to 50%.
This is super self-indulgent, and I apologise for that - but I did think it was quite a fun dataset to explore in more detail (for me, anyway). Because to keep track of what I was eating, I dedicated a page in my very underused bullet journal to the task, so I’ve got a log of whether each day was vegetarian, pescetarian or meat-eating. It looks like this:
The first thing I wanted to do was replicate that chart using ggplot2
. I started off by transcribing the data into a spreadhseet with the same dimensions and info.
# Load libraries and fonts
library(data.table)
library(ggplot2)
extrafont::loadfonts(device="win")
# Read in data
food <- fread('food_diary.csv', header = TRUE)
food
## Month 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## 1: January V P P P M V M M V P M V V V M V M P M V M P P M V
## 2: February M M M M V P M V M V V V V P M V M V V M P P M P M
## 3: March M M M V V P M V M M V P V P M V M P V V P M P M V
## 4: April V V V M M V V M V P M V P M M P V V M V V P M P V
## 5: May M M V V V V P M P P M M M V V V V V M V M P P M M
## 6: June V V M P P P V M V V M P P M V V P V M V M V V V V
## 7: July P P M V M P P P P P V M M M P V M V M V P M V V V
## 8: August M P V P P P M V M V V M M M M M P M V V M V M V V
## 9: September M V M M V P V P V M M M M P P P M M M V V V P P P
## 10: October V M V V P V P V M M P V V M P P M M V M P P V V M
## 11: November V M V M V P V M P P P M M M M V M P M V V M P M V
## 12: December P P V M M V V V P V M M M V P M P P V M V V M M M
## 26 27 28 29 30 31
## 1: V V P P P M
## 2: P V P P
## 3: M V P M V V
## 4: M V M M P
## 5: M V V P V M
## 6: M V V M P
## 7: M V P V V P
## 8: M V P M P V
## 9: M V V V M
## 10: P V M V V M
## 11: M V V M V
## 12: M V V P P M
Then I adapted the data so it was a bit more user-friendly. I wanted one row per day, which will be useful for future analysis too.
# Transform data so one row per day
day_cols <- as.character(seq(1, 31))
food_by_day <- melt(food, id.vars = "Month", measure.vars = day_cols,
variable.name = "Day", value.name = "Diet")
food_by_day <- food_by_day[Diet != ""]
head(food_by_day)
## Month Day Diet
## 1: January 1 V
## 2: February 1 M
## 3: March 1 M
## 4: April 1 V
## 5: May 1 M
## 6: June 1 V
And here’s my attempt to roughly replicate the page from my journal.
# Months in correct order in factor
food_by_day[, Month := factor(Month, levels = unique(Month))]
# Colours for plot
diet_cols <- c("orange", "dodgerblue3", "limegreen")
# Plot
ggplot(food_by_day, aes(Day, Month, colour = Diet)) +
geom_point(size = 2) +
theme(
plot.background = element_rect(fill = "snow1"),
legend.background = element_rect(fill = "snow1"),
panel.background = element_rect(fill = "snow1"),
text = element_text(colour = "seagreen4", family = "Corbel Light",
size = 16, face = "bold"),
axis.text = element_text(colour = "deeppink4",
family = "Ink Free", size = 8, face = "plain"),
axis.title = element_blank(),
panel.grid.major = element_line(colour = "gray80",
size = 0.1,
linetype = "dotted"),
plot.title = element_text(size = 30, hjust = 0.5,
margin=margin(0,0,15,0)),
axis.ticks = element_blank(),
legend.key = element_rect(fill = "snow1")
) +
scale_y_discrete(limits = rev(levels(food_by_day$Month))) +
scale_x_discrete(position = "top") +
scale_color_manual(values = diet_cols, labels = c("Meat",
"Pescetarian",
"Vegetarian")) +
labs(title = "EAT LESS MEAT TRACKER 2020")
Next, I’m going to do some data exploration and try to find out if there are any interesting patterns - particularly if they help me do better this year.