ggplot2 ось x с метками для каждого значения R - PullRequest
0 голосов
/ 27 марта 2020

Я хочу создать график, который имеет 36 тиков на оси X для отображения текста.

У меня есть df для этого примера, я хочу 12 тиков для отображения текста.

period  agg1  agg2
201601   1      2
201602   2      2 
201603   3      2 
  .      .      .
  .      .      .
  .      .      .
201612   4      1

period - это число c, в форме ГГГГММ, поэтому я изменил его на дату

for (row in 1:nrow(df)){
  df[row,'period'] <- df[row,'period'] %>%
    mutate(period = as.Date(as.character(period*100+25),"%Y%m%d"))
}

растаял данные

long_df <- melt(df, id = "period")

Я нанес на график данные использование:

df_plot <- ggplot(data = long_df,
                aes(x = period, y = value, colour = variable)) + 
                geom_line()

# adding titles & labels
df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg, £million") +
  scale_x_discrete(breaks = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"))

Это создает график, где отметки находятся в правильном месте, но текст не отображается в отметке.

Я попытался добавить аргумент labels = c(), но он ничего не показывает

df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg") +
  scale_x_discrete(breaks = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"), 
                   labels = c("201601", "201602", "201603", "201604", "201605", "201606", "201607", "201608", "201609", "201610", "201611", "201612"))

Я нашел это: ggplot метки оси x со всеми значениями оси x но согласно решению мой аргумент labels должен работать?

1 Ответ

0 голосов
/ 27 марта 2020
# formatting period to date
library(zoo) # additional library required

df$period <- sapply(df$period,as.character)
#sapply(df$period, class)

for (row in 1:nrow(df)){
 df$period <- zoo::as.Date(zoo::as.yearmon(df$period, "%Y%m"))


# plot
df_plot <- ggplot(data = long_df,
                aes(x = period, y = value, colour = variable)) + 
                geom_line()
df_plot + labs(title = "Aggregates", colour = "Method") + 
              xlab("Period") + 
              ylab("Agg, £million") +
              scale_x_date(breaks = "1 month", date_labels = "%Y%m") +
              theme(axis.text.x = element_text(angle = 90, hjust = 1)) # to rotate 90 degrees 

...