• Stars
    star
    239
  • Rank 168,763 (Top 4 %)
  • Language
    R
  • License
    MIT License
  • Created over 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Ready to print calendars with ggplot2

calendR R package

Ready to print monthly and yearly calendars made with ggplot2

📅 The calendars will be created by default in the system locale. Change it with Sys.setlocale(locale = "the_preferred_language").

📖 Check the full calendR package tutorial.

Index

Installation

GitHub

# Install the development version from GitHub:
# install.packages("devtools")
devtools::install_github("R-CoderDotCom/calendR")

CRAN

install.packages("calendR")

CRAN_Status_Badge CRAN_Downloads

Yearly calendar

library(calendR)
calendR() # Defaults to the current year

Calendar_2020

calendR(year = 2020,           # Year
        mbg.col = 2,           # Background color for the month names
        months.col = "white",  # Text color of the month names
        special.days = c(1, 50, 12, 125, 80,     # Color days of the year
                         99, 102, 205, 266, 360),
        special.col = "pink", # Color of the special.days
        months.pos = 0.5)     # Horizontal alignment of the month names

calendR

Monthly calendar

calendR(year = 2028, month = 1)

Calendar_January_2028

calendR(month = 7, year = 2022, 
        special.days = c(1, 5, 12, 28),       # Color days of the month
        text = "Visit\nhttps://r-coder.com/", # Add some text
        text.pos = c(1, 5, 12, 28))           # Where to add the text

calendar_july

Custom start and end date

calendR(from = "2020-09-01",  # Start date
        to = "2021-05-31",    # End date
        lty = 0,              # Line type
        title = "2020-2021",  # Title
        start = "M",          # Start on Mondays
        months.pos = 0)       # Left-align month names

imagen

Start of the week (Monday or Sunday)

# calendR(month = 1, start = "S") # Week starts on Sunday (default)
calendR(month = 1, start = "M")   # Week starts on Monday

Calendar_January_2020

Orientation ("landscape" or "portrait")

# calendR(year = 2021, orientation = "landscape") # Default
calendR(year = 2021, orientation = "portrait")

Specify the number of columns

The following will override the orientation argument:

calendR(year = 2021, ncol = 2) 

Calendar heatmap (Gradient)

calendR(year = 2021, special.days = 1:365,
        gradient = TRUE,        # Needed to create the heat map
        special.col = rgb(1, 0, 0, alpha = 0.6), # Higher color
        low.col = "white")                       # Lower color

Calendar_2021_GRADIENT

Gradient for certain days

# Data
my_data <- runif(20, 10, 20)

# Create a vector where all the values are
# a bit lower than the lowest value of your data
# (This will make the trick)
days <- rep(min(my_data) - 0.05, 365)

# Fill the days you want with your data
days[20:39] <- my_data

calendR(year = 2021,
        special.days = days,
        gradient = TRUE,   # Needed to create the heat map
        special.col = rgb(1, 0, 0, alpha = 0.6), # Higher color
        low.col = "white") # In this case, the color of the values out of the gradient

imagen

Gradient with two colors (GitHub version only)

# Data
team <- c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A")
opponent <- c("B", "C", "D", "B", "D", "C", "D", "B", "B", "D")

opponentHA <- c("@B", "C", "@D", "@B", "@D", "C", "D","B", "@B", "D")
dayofyear <-  c(16, 69, 69, 88, 103, 121, 154, 176, 182, 202) 
# This is the day of year with October 1, 2021 set as Day 1
ranking <- c(-3, 2, 2, -1, 0, 3, 0, -3, 2, 1)

df  <- data.frame(dayofyear, team, opponent, opponentHA, ranking)

from <- "2021-10-01"
to <- "2022-04-30"

as.Date(to)-as.Date(from) # 211 (+ 1)

# Set all as NA (NA values will be colored with white)
days <- rep(NA, 212)

# Pass you data to the corresponding days
days[df$dayofyear] <- df$ranking

calendR(from = "2021-10-01",
        to = "2022-04-30",
        start = "M",               
        mbg.col = 1,           
        months.col = "white",      
        special.days = days, 
        gradient = TRUE,
        special.col = "#0A8007", # Color highest value special day = green
        low.col = "red",
        lty = 0,               
        weeknames = c("Mo", "Tu",  "We", "Th", "Fr", "Sa", "Su"),
        title = "Oct - May 2021",
        subtitle = "Gradient Based on Ranking",
        title.size = 40, 
        subtitle.size = 20,
        orientation = "l")

imagen

Add several events

# Vector of NA which length is the number of days of the year or month
myfills <- rep(NA, 365) 
# myfills <- rep(NA, 366) # For leap years

# Add the events to the desired days
myfills[c(1:4, 50, 300:315)] <- "Holidays"
myfills[16] <- "Birthday"

calendR(special.days = myfills,
        special.col = 2:3,     # Add as many colors as events
        legend.pos = "right")  # Add a legend if desired

imagen

Colors order

The colors are displayed based on the levels of the factor of the categorical variable.

# Current order:
levels(factor(myfills)) # "Birthday" "Holidays"

#------
# Way 1
#------
calendR(special.days = myfills,
        special.col = 3:2,     # Change the order to match the desired colors
        legend.pos = "right")

#------
# Way 2
#------

# Desired order and colors
desired_order <- c("Holidays", # (2: red)
                   "Birthday") # (3: green)

# Order the colors based on the desired order
ordered_colors <- c(2, 3)[order(desired_order)]

calendR(special.days = myfills,
        special.col = ordered_colors, # Ordered colors
        legend.pos = "right")  # Add a legend if desired

custom_order

Several events with custom start and end dates

start_date <- "2020-04-01"
end_date <- "2020-12-31"

custom_dates <- seq(as.Date(start_date), as.Date(end_date), by = "1 day")
events <- rep(NA, length(custom_dates))

# Time difference
dif <- 365 - length(custom_dates)

myfills <- rep(NA, length(custom_dates))

# Specify the dates as in a 365 days calendar and substract the time difference
myfills[c(180:210) - dif] <- "Holidays"
myfills[215 - dif] <- "Birthday"

calendR(from = start_date, to = end_date,
        special.days = myfills, special.col = 2:3, legend.pos = "bottom")

imagen

Weekends

# Calendar with highlighted weekends (Saturday and Sunday)
calendR(year = 2023, special.days = "weekend")

image

Custom weekends

This example is useful to get the position of any day or days of a year, e.g., all the Mondays of 2022, all the Fridays and Saturdays of 2023, ...

# year: year of the calendar
# day: 0–6 day OR days of the week, starting on Sunday.
getDays<- function(year, day) {
  start <- as.Date(paste0(year,"-01-01"))
  end <- as.Date(paste0(year,"-12-31"))
  ndays <- length(seq(start, end, by="1 day"))
  days <- as.POSIXlt(paste(year, 1:ndays, sep="-"), format="%Y-%j")
  days_position <- which(seq(start, end, by="1 day") %in% days[days$wday %in% day])
  days_position  <- days_position [!is.na(days_position)]

  return(days_position )
}

# Get the weekeneds of 2023
arab_weekends <- getDays(2023, day = c(5, 6))

# Plot the calendar
calendR(year = 2023, special.days = arab_weekends)

imagen

Add week number (only on the GitHub development version)

calendR(year = 2021,
        week.number = TRUE,          # Adds the week number of the year for each week 
        week.number.col = "gray30",  # Color of the week numbers
        week.number.size = 8)        # Size of the week numbers

imagen

calendR(year = 2021,
        month = 2,
        week.number = TRUE,      # Adds the week number of the year for each week 
        week.number.col = 2,     # Color of the week numbers
        week.number.size = 14)   # Size of the week numbers

imagen

Add background image

calendR(mbg.col = 4,               # Background color for the month names
        months.col = "white",      # Text color of the month names
        special.days = "weekend",  # Color the weekends
        special.col = "lightblue", # Color of the special.days
        lty = 0,                   # Line type
        weeknames = c("Mo", "Tu",  # Week names
                      "We", "Th",
                      "Fr", "Sa",
                      "Su"),
        title.size = 30,   # Title size
        orientation = "p", # Portrait orientation
        start = "M",       # Start the week on Mondays
        bg.img = "https://i.pinimg.com/originals/10/1e/f6/101ef6a9e146b23de28fa2cd568ad17b.jpg")  # Image

Lunar calendar

calendR(month = 1,  
        lunar = TRUE,         # Add moons to monthly calendar
        lunar.col = "gray60", # Color of the non-visible area of the moon
        lunar.size = 7)       # Size of the moons

Lunar_Calendar

Save as PDF

# Defaults to A4 size
calendR(year = 2021, orientation = "portrait", pdf = TRUE)

# Set a paper size (from A6 to A0)
calendR(year = 2021, orientation = "portrait", pdf = TRUE, papersize = "A6")

# Specify a custom document name
calendR(year = 2021, orientation = "portrait", pdf = TRUE, doc_name = "My_calendar")

Further customization

Example 1

calendR(year = 2022,                             # Year
        mbg.col = 2,                             # Background color for the month names
        months.col = "white",                    # Text color of the month names
        special.days = c(1, 50, 12, 125, 80,     # Color days of the year
                          99, 102, 205, 266, 359),
        special.col = "pink",                    # Color of the special.days
        months.pos = 0.5,                        # Center the month names
        lty = 0,                                 # Line type
        weeknames = c("Mo", "Tu", "We", "Th",    # Week names
                      "Fr", "Sa","Su"), 
        bg.col = "#f4f4f4",                      # Background color
        title.size = 60,                         # Title size
        orientation = "p")                       # Orientation

Example 2

calendR(year = 2020,                        # Year
        month = 10,                         # Month
        title = "My calendar",              # Change the title
        subtitle = "Have a nice day",       # Add a subtitle (or motivational phrase)
        subtitle.col = 3,                   # Color of the subtitle
        weeknames = c("S", "M", "T", "W",   # Change week day names
                      "T", "F", "S"), 
        bg.col = "white",                   # Background color
        special.days = "weekend",           # Colorize the weekends (you can also set a vector of days)
        special.col = rgb(0, 0, 1, 0.15),   # Color of the special days
        text = "Running",                   # Add text (only for monthly calendars)
        text.pos = c(7, 14, 25))            # Days of the month where to put the texts       

Custom_colors

Example 3

calendR(from = "2020-09-01", # Custom start date
        to = "2021-05-31",   # Custom end date
        mbg.col = 4,               # Background color for the month names
        months.col = "white",      # Text color of the month names
        special.days = "weekend",  # Color the weekends
        special.col = "lightblue", # Color of the special.days
        lty = 0,                   # Line type
        weeknames = c("Mo", "Tu",  # Week names
                      "We", "Th",
                      "Fr", "Sa",
                      "Su"),
        bg.col = "#f4f4f4",         # Background color
        title = "Academic calendar 2020-2021", # Title
        title.size = 30,                       # Title size
        orientation = "p", # Portrait orientation
        start = "M")       # Start of the week
# See all the arguments of the function for full customization of the colors, text size and style.

Example 4

Sys.setlocale(locale = "English")
calendR(month = 10,  # Month
        start = "M", # Week starts on Monday
        orientation = "landscape", # Horizontal
        
        # Size and color of the title
        title.size = 40,
        title.col = "white",
        
        weeknames = c("MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"),
        # Subtitle, color y and size
        subtitle = "I WITCH YOU A HAPPY HALLOWEEN",
        subtitle.col = "red",
        subtitle.size = 16,
        
        # Text, color, size and position
        text = "HALLOWEEN",
        text.col = "red",
        text.size = 5,
        text.pos = 31,
        
        # Color the weekends with gray
        special.days = "weekend",
        special.col = "grey40",
        
        # Color of the lines, of the background
        # and of the days
        col = "white",
        bg.col = "grey20",
        low.col = "transparent", # The same color as the background
        
        # Color and size of the number of the days
        days.col = "white",
        day.size = 4,
        
        # Moon phases and moon sizes
        lunar = TRUE,
        lunar.size = 8,
        lunar.col = "red",
        
        # Color and size of the week names
        weeknames.col = "white",
        weeknames.size = 6,
        
        # Width and line types
        lwd = 0.25,
        lty = 1,
        
        # Background image
        bg.img = "https://user-images.githubusercontent.com/67192157/94996404-cdc5cd80-05a4-11eb-97cb-84a195d9138c.png",
        
        # Font family and font styles
        font.family = "CF Halloween",   # You will need to download and import the font with the extrafont package
        font.style = "plain",
        pdf = TRUE,
        doc_name = "halloween")

halloween

Example 5

calendR(month = 12,
        start = "M",
        subtitle = "Merry Christmas!",
        subtitle.col = "white", lwd = 0.4,
        title.size = 70, 
        subtitle.size = 40,
        day.size = 9,
        weeknames.size = 10,
        special.col = rgb(0.2, 0.2, 0.2, 0.2),
        days.col = "white",
        title.col = "white",
        bg.col = "red",
        low.col = "transparent",
        col = "white",
        special.days = c(5, 6, 12, 13, 19, 20, 25, 26, 27, 31),
        bg.img = "https://user-images.githubusercontent.com/67192157/100520172-b23e0400-319c-11eb-98a8-10fdc95006fe.png",
        weeknames.col = "white",
        font.family = "perfect",  # https://www.dafont.com/es/the-perfect-christmas.font
        pdf = TRUE)

Christmas_calendar

calendR(month = 12,
        start = "M",
        subtitle = "Merry Christmas!",
        subtitle.col = "gray40",
        lwd = 0.4,
	title.size = 70,
        subtitle.size = 40,
        day.size = 9,
        weeknames.size = 10,
	special.days = "weekend",
        special.col = rgb(1, 1, 1, 0.1),
        days.col = "gray20",
	title.col = "gray30",
        bg.col = "gray40",
        low.col = "transparent",
        col = "gray50",
	weeknames.col = "gray20",
        bg.img = "https://user-images.githubusercontent.com/67192157/100520175-b4a05e00-319c-11eb-8733-af9f20b674c8.png",
        font.family = "perfect", # https://www.dafont.com/es/the-perfect-christmas.font
        pdf = TRUE)

Christmas_calendar_2020

Example 6

windows(210, 297)

# Dancing Script Font
library(showtext)
font_add_google(name = "Dancing Script",   
                family = "dancing") 
showtext_auto()

Sys.setlocale(locale = "English")

# Landscape background: https://user-images.githubusercontent.com/67192157/103295646-aee4a500-49f4-11eb-8c5f-2857a7ee13f2.png

calendR(2021,
        subtitle = NULL,
	mbg.col = "#73b7fb",      
        months.col = "white",     
        special.days = "weekend",
	title.col= "#103a63",
	weeknames.col= "#103a63",
	days.col = "#14487c",
	special.col = "#d7eafd", 
	lty = 0,   
	monthnames = c("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"),
	font.family = "dancing",     
	weeknames.size = 6,   
	week.number = TRUE,
	week.number.col = "#73b7fb",
	weeknames = c("Mo", "Tu",  
	              "We", "Th",
	              "Fr", "Sa",
 	              "Su"),        
	title.size = 40,    
	months.size = 15,              
	orientation = "p", 
	bg.img = "https://user-images.githubusercontent.com/67192157/103295110-9031de80-49f3-11eb-88b9-52e9dd0dc4ea.png",
	day.size = 3.25,
	papersize = "A4",
	start = "M")  

Calendar 2021

Example 7

library(showtext)

# https://www.dafont.com/es/cat-paw.font
font_add(family = "Cat", regular = "Cat paw.ttf")

windows(8.27,11.7)

showtext_auto()

calendR(2021,
        font.family = "Cat",
        subtitle="", 
	bg.img = "https://user-images.githubusercontent.com/67192157/103364654-a8226480-4abe-11eb-8c2f-9eaa27ed543e.png",
	mbg.col = "#b29a8e",
	bg.col = "#faf4ef",            
	months.col = "white",     
	title.col="#7c6b63",
	days.col="#6a5c55",
	weeknames.col = "#7c6b63",
	special.days = "weekend",
	special.col = "#f0dbca", 
	lty = 0,   
	monthnames = c("January", "February", "March", "Aprrrril", "May", "June", 
	               "July", "August", "September", "October", "November", "December"),        
	weeknames.size = 7,   
	week.number = TRUE,
	week.number.col = "#d4bbb4",
	weeknames = c("Mo", "Tu","We", "Th","Fr", "Sa","Su"),        
	title.size = 50,    
	months.size = 24,              
	orientation = "p",  
	day.size = 4.5,
	start = "M")

Calendar 2021

library(showtext)

# https://www.dafont.com/es/cat-paw.font
font_add(family = "Cat", regular = "Cat paw.ttf")

windows(11.7, 8.27)

showtext_auto()

calendR(2021,
        font.family = "Cat",
        subtitle = "", 
	bg.img = "https://user-images.githubusercontent.com/67192157/103365300-10be1100-4ac0-11eb-81f1-f06232101cba.png",
	mbg.col = "#b29a8e",
	bg.col = "#faf4ef",            
	months.col = "white",     
	title.col="#7c6b63",
	days.col="#6a5c55",
	weeknames.col = "#7c6b63",
	special.days = "weekend",
	special.col = "#f0dbca", 
	lty = 0,   
	monthnames = c("January", "February", "March", "Aprrrril", "May", "June", 
		"July", "August", "September", "October", "November", "December"),        
	weeknames.size = 7,   
	week.number = TRUE,
	week.number.col = "#d4bbb4",
	weeknames = c("Mo", "Tu","We", "Th","Fr", "Sa","Su"),        
	title.size = 50,    
	months.size = 24,              
	orientation = "l",  
	day.size = 4.5,
	start = "M")

Calendar 2021

Social Media