Milton de Paula
Milton de Paula

Reputation: 125

Graph X axis formatting

How can I do to insert in the "X axis" the months abbreviations ("xi") instead of the numbers?

I need to switch in the X axis the numbers for months abbreviations ("xi").

Reproductive example

library(ggplot2)
library(dplyr)

x<-c("2014-06","2014-07","2014-08","2014-09","2014-10","2014-11","2014-12")
xi<-c("Jun","Jul","Aug","Sep","Oct","Nov","Dez")
values.observed<-c(3.698,2.132,2.716,4.279,3.918,4.493,4.265)
values.estimated<-c(2.670,2.689,3.078,3.735,3.963,4.238,4.315)
yii<-c(0.629,1.394,1.957,2.677,2.913,3.190,3.299)
yiii<-c(4.567,3.982,4.185,4.785,4.996,5.279,5.349)
df<-data.frame(x,xi,values.observed,values.estimated,yii,yiii)

Year <- seq(min(as.integer(df$x)), max(as.integer(df$x)), by = 1)

df %>%
    mutate(x = as.integer(x)) %>%
    tidyr::pivot_longer(
        cols = starts_with('values'),
        names_to = 'group',
        values_to = 'values'
    ) %>% 
    mutate(group = ifelse(group == "values.observed", "observed", "estimated")) %>%
    ggplot(aes(x = x, y = values)) +
    geom_line(aes(color = group), size=1.3) +
    geom_ribbon(aes(ymin = yii, ymax = yiii), alpha = 0.3, show.legend = FALSE) +
    scale_color_manual(values = c(observed = 'green', estimated = 'red'))+
    scale_x_continuous(breaks = Year, labels = Year) +
    ylab("X") +
    xlab("Months") +
    theme(axis.text.x = element_text(angle = -15, vjust = 0))

Upvotes: 1

Views: 34

Answers (1)

StupidWolf
StupidWolf

Reputation: 46898

You can group the first geom_line with group and force the second geom_ribbon to take use as.numeric(xi) :

df$xi = factor(df$xi,levels=df$xi)

df %>%
tidyr::pivot_longer(
        cols = starts_with('values'),
        names_to = 'group',
        values_to = 'values'
) %>% 
mutate(group = ifelse(group == "values.observed", "observed", "estimated")) %>%
    ggplot() +
    geom_line(aes(x = xi, y = values,color = group,group = group), size=1.3) +
    geom_ribbon(aes(x = as.numeric(xi),y = values,
    ymin = yii, ymax = yiii), alpha = 0.3, show.legend = FALSE) +
    scale_color_manual(values = c(observed = 'green', estimated = 'red'))+
    ylab("X") +
    xlab("Months") +
    theme(axis.text.x = element_text(angle = -15, vjust = 0))

enter image description here

Or with what you have done, just provide the labels:

labels = split(as.character(df$xi),as.integer(df$xi))

df %>%
    mutate(x = as.integer(x)) %>%
    tidyr::pivot_longer(
        cols = starts_with('values'),
        names_to = 'group',
        values_to = 'values'
    ) %>% 
    mutate(group = ifelse(group == "values.observed", "observed", "estimated")) %>%
    ggplot(aes(x = x, y = values)) +
    geom_line(aes(color = group), size=1.3) +
    geom_ribbon(aes(ymin = yii, ymax = yiii), alpha = 0.3, show.legend = FALSE) +
    scale_color_manual(values = c(observed = 'green', estimated = 'red'))+
    scale_x_continuous(breaks = as.numeric(names(labels)), labels = labels) +
    ylab("X") +
    xlab("Months") +
    theme(axis.text.x = element_text(angle = -15, vjust = 0))

Upvotes: 1

Related Questions