首页 文章

ggplot条形图,月按字母顺序排列(即4月,8月,12月) . 我希望它按升序排列(即1月,2月,3月)

提问于
浏览
1

数据集:

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轴上的月份按字母顺序排列 . 我希望它按升序重新排列(即1月,2月,3月) .

2 回答

  • 0

    假设你有这样的东西:

    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')
    
  • 0

    您可以直接在ggplot中手动定义订单:

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

相关问题