Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change x-axis ticks to reflect another variable?

I'm working with a data frame that includes both the day and month of the observation:

Day     Month      
1      January
2      January
3      January
...
32     February
33     February
34     February
...
60     March
61     March

And so on. I am creating a line graph in ggplot that reflects the day by day value of column wp (which can just be assumed to be random values between 0 and 1).

enter image description here Because there are so many days in the data set, I don't want them to be reflected in the x-axis tick marks. I need to refer to the day column in creating the plot so I can see the day-by-day change in wp, but I just want month to be shown on the x-axis labels. I can easily rename the x-axis title with xlab("Month"), but I can't figure out how to change the tick marks to only show the month. So ideally, I want to see "January", "February", and "March" as the labels along the x-axis.

test <- ggplot(data = df, aes(x=day, y=wp)) +
  geom_line(color="#D4BF91", size = 1) +
  geom_point(color="#D4BF91", size = .5) + 
  ggtitle("testex") +
  xlab("Day") +
  ylab("Value") +
  theme_fivethirtyeight() + theme(axis.title = element_text())
like image 265
887 Avatar asked Nov 01 '25 16:11

887


1 Answers

When I treat the day as an actual date, I get the desired result:

library(lubridate)
set.seed(21540)
dat <- tibble(
  date = seq(mdy("01-01-2020"), mdy("01-01-2020")+75, by=1), 
  day = seq_along(date), 
  wp = runif(length(day), 0, 1)
)

ggplot(data = dat, aes(x=date, y=wp)) +
  geom_line(color="#D4BF91", size = 1) +
  geom_point(color="#D4BF91", size = .5) + 
  ggtitle("testex") +
  xlab("Day") +
  ylab("Value") +
  theme(axis.title = element_text())

enter image description here

More generally, though you could use scale_x_continuous() to do this:

library(lubridate)
set.seed(21540)
dat <- tibble(
  date = seq(mdy("01-01-2020"), mdy("01-01-2020")+75, by=1), 
  day = seq_along(date), 
  wp = runif(length(day), 0, 1), 
  month = as.character(month(date, label=TRUE))
)

firsts <- dat %>% 
  group_by(month) %>% 
  slice(1)


ggplot(data = dat, aes(x=day, y=wp)) +
  geom_line(color="#D4BF91", size = 1) +
  geom_point(color="#D4BF91", size = .5) + 
  ggtitle("testex") +
  xlab("Day") +
  ylab("Value") +
  scale_x_continuous(breaks=firsts$day, label=firsts$month) + 
  theme(axis.title = element_text())

enter image description here

like image 100
DaveArmstrong Avatar answered Nov 03 '25 07:11

DaveArmstrong



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!