【问题标题】:Months on x-axis instead of numberx 轴上的月份而不是数字
【发布时间】:2019-10-02 21:56:41
【问题描述】:

我想将 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

【问题讨论】:

    标签: r ggplot2 geom-bar ggplotly geom-text


    【解决方案1】:

    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(数据 = 数据帧( 月 = forcats::fct_reorder(month.abb[1:10], 1:10), 数量 = 1:10), aes(月,数)) + geom_col()

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

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

    1. 或者您也可以使用数字轴,并带有反映您想要的自定义标签:

      ggplot(数据 = 数据帧( month_num = 1:10, 数量 = 1:10), aes(month_num, num)) + geom_col() + scale_x_continuous(labels = function(x) month.abb[x])

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

      ggplot(数据 = 数据帧( 月 = 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")

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多