Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Axis titles are disappearing in ggplot2 when I try to manually set months

I’m trying to use months as the x-axis for a ggplot graph, but I have multiple times in each day, and I need the times to be in chronological order. I’ve tried manually setting the breaks and labels to month numbers and names, but now the x-axis is just blank. What should I do?

month_nums <- seq(1, 12)
month_names <- month.abb

time_strs <- paste(moods$Month, moods$Day, moods$Year, moods$Hour, moods$Minute, sep=":")
timestamps <- as.POSIXct(time_strs, format = "%m:%d:%Y:%H:%M", tz="EST")

ggplot(data2, aes(x=timestamps)) +
  geom_smooth(aes(y=anxious2, color="Anxiety"), size=1.2) +
  geom_smooth(aes(y=happy2, color="Happiness"), size=1.2) +
  geom_smooth(aes(y=social2, color="Sociability"), size=1.2) +
  scale_color_manual(name="Variables", 
                     values=c("red", 
                              "grey20",
                              "grey40")) + 
  scale_x_continuous(name="Timestamps", breaks=month_nums, labels=month_names) +
  scale_y_continuous(name="Intensity") +
  ggtitle("Emotions")

# moods data
structure(list(Year = c("2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021"), 
Month = c("9", "9", "9", "9", "9", "10", "10", "10", "10", "10"), 
Day = c("29", "29", "30", "30", "30", "1", "1", "1", "1", "2"), 
Hour = c("16", "21", "7", "12", "16", "8", "12", "19", "22", "13"), 
Minute = c("24", "52", "58", "53", "18", "42", "24", "49", "18", "27"), 
happy = c("3", "4", "5", "3", "4", "5", "2", "3", "1", "1"), 
social = c("6", "5", "8", "8", "4", "10", "3", "2", "2", "2"), 
anxiety = c("-", "-", "1", "2", "1", "1", "2", "1", "1", "1")), 
row.names = 2:11, class = "data.frame")

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

As timestamps is a datetime/POSIXct, you’ll find scale_x_datetime much handier than scale_x_continuous. You can tweek the arguments to show what you prefer.

scale_x_date(date_breaks = "1 month", date_labels = "%b")

Output:

enter image description here

Data:

I needed to change your variable names of the provided data a little bit, add some (smaller) missing parts, as well as extending the range of the data to more points than 2 in order to have some output to show here.

moods <- structure(list(Year = c("2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021", "2021"), 
               Month = c("9", "7", "8", "9", "9", "10", "10", "11", "12", "12"), 
               Day = c("29", "29", "30", "30", "30", "1", "1", "1", "1", "2"), 
               Hour = c("16", "21", "7", "12", "16", "8", "12", "19", "22", "13"), 
               Minute = c("24", "52", "58", "53", "18", "42", "24", "49", "18", "27"), 
               happy = c("3", "4", "5", "3", "4", "5", "2", "3", "1", "1"), 
               social = c("6", "5", "8", "8", "4", "10", "3", "2", "2", "2"), 
               anxiety = c(NA, NA, "1", "2", "1", "1", "2", "1", "1", "1")), 
          row.names = 2:11, class = "data.frame") |> mutate(across(c(happy:anxiety), as.numeric))

data2 <- moods

data2$time_strs <- paste(moods$Month, moods$Day, moods$Year, moods$Hour, moods$Minute, sep=":")
data2$timestamps <- as.POSIXct(data2$time_strs, format = "%m:%d:%Y:%H:%M", tz="EST")

ggplot(data2, aes(x=timestamps)) +
  geom_smooth(aes(y=anxiety, color="Anxiety"), size=1.2) +
  geom_smooth(aes(y=happy, color="Happiness"), size=1.2) +
  geom_smooth(aes(y=social, color="Sociability"), size=1.2) +
  scale_color_manual(name="Variables", 
                     values=c("red", 
                              "grey20",
                              "grey40")) + 
  scale_x_datetime(date_breaks = "1 month", date_labels = "%b") +
  scale_y_continuous(name="Intensity") +
  ggtitle("Emotions")
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading