【问题标题】:ggplot Bar graph, month is arranged alphabetically (ie Apr, Aug,Dec). I want it to be arranged in ascending order (ie Jan, Feb, Mar)ggplot 条形图,月份按字母顺序排列(即Apr、Aug、Dec)。我希望它按升序排列(即一月,二月,三月)
【发布时间】:2016-12-10 06:25:29
【问题描述】:

数据集:

Header| Header| Header
Month   A             B
Jan 2173.248       5433.12
Feb 2418.8252      5726.5076
Mar 2692.1532      6035.7396
Apr 2996.3648      6361.6696
May 3334.9558      6705.1996
Jun 3711.8048      7067.28
Jul 4131.2392      7448.914
Aug 4598.0682      7851.1554
Sep 5117.651       8275.1174
Oct 5695.9452      8721.9748
Nov 6339.586       9192.9618
Dec 7055.9588      9689.3808


u=dataset %>% gather(var, val, A:B)
ggplot(data=u,aes(x = Month, y = val, fill = var)) + geom_bar(stat = 'identity', position = 'dodge')

我明白了情节,但 x 轴上的月份是“按字母顺序”排列的。我希望它按升序重新排列(即一月、二月、三月)。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    假设你有这样的东西:

    dataset <- data.frame(Month = as.factor(c('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun')),
                     A = c(1, 2, 3, 4, 5, 6),
                     B = c(22, 33, 44, 55, 66, 77))
    
    u <- dataset %>% tidyr::gather(var, val, A:B)
    

    您可以通过显式设置顺序来更改因子水平的顺序(尊重数据框中的顺序):

    u$Month <- factor(u$Month, levels = u$Month[order(u$val)])
    
    ggplot(data=u,aes(x = Month, y = val, fill = var)) + geom_bar(stat = 'identity', position = 'dodge')
    

    【讨论】:

    • 我很高兴它有效 :-) 如果你觉得这个答案有用,请考虑接受它(它是左边的绿色勾号)。
    • 。谢谢 :-)。
    【解决方案2】:

    可以直接在ggplot中手动定义顺序:

    ggplot(u, aes(x = Month, y = val, fill = var)) +
      geom_bar(stat = 'identity', position = 'dodge') +
      scale_x_discrete(labels = dataset$Month)
    

    【讨论】:

      猜你喜欢
      • 2019-09-30
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多