x 轴上的月份而不是数字

Months on x-axis instead of number

我想将 x 轴上的数字转换为月份,我成功了,但我希望月份按时间顺序而不是字母顺序排列。

我使用了以下代码:

temp %>% 
  ggplot(aes(month.abb[MoSold], fill = SalePrice)) + 
  geom_bar() +
  scale_y_continuous(labels = number) +
  xlab("Month") +
  theme_bw()

以上代码生成下图months in alphabetical order.

相反,我希望图形看起来像名称而不是数字 graph with chronological order without month name

month.abb[] 生成字符,除了字母顺序之外,它们在 R 中没有固有的顺序,这是 ggplot 显示它们的方式。

ggplot(data = data.frame(
  months = month.abb[1:10],
  num = 1:10),
  aes(months, num)) +
  geom_col()

要按预期顺序查看它们,至少有 3 个选项:

  1. month.abb转换为factor数据类型,可以指定顺序。

    使用 forcats

    将月份转换为因数

    ggplot(数据=data.frame( 个月 = forcats::fct_reorder(month.abb[1:10], 1:10), 数 = 1:10), aes(月数, 数)) + geom_col()

    使用基数 R 将月份转换为因数

    ggplot(数据=data.frame( 月 = 因子(1:10,标签 = month.abb[1:10]), 数 = 1:10), aes(月数, 数)) + geom_col()

  1. 或者您可以交替使用数字轴,自定义标签反映您的需要:

    ggplot(数据=data.frame( month_num = 1:10, 数 = 1:10), aes(month_num, num)) + geom_col() + scale_x_continuous(标签=函数(x)month.abb[x])

  2. 或者最简单的方法是,您可以使用 Date 或 POSIXct 数据类型。

    ggplot(数据=data.frame( month = seq.Date(as.Date("2019-01-01"), as.Date("2019-10-01"), by = "month"), 数 = 1:10), aes(月, 数)) + geom_col() + scale_x_date(date_breaks = "1个月", minor_breaks = NULL,date_labels = "%b")