重新排序月份导致x轴(ggplot)

时间:2012-11-25 20:23:04

标签: r

我想在x轴上生成一个带有重新排序月份的情节(而不是从1月开始到12月结束,我想从4月开始到3月结束)。

我的数据类似于:

          Month         An              Fiscal.Year Month.Number Month.Name
    1     2009-04-01    40488474        2009        4            Apr
    2     2009-05-01    53071971        2009        5            May
    3     2009-06-01    24063572        2009        6            Jun
    ...
    44    2012-11-01    39457771        2012        11           Nov
    45    2012-12-01    44045572        2012        12           Dec
    46    2013-01-01    90734077        2012        1            Jan

用于制作图表的代码是:

g <- ggplot(data = data, aes(x = Month.Number, y = An)) +
     geom_line(aes(group = Fiscal.Year, colour = factor(Fiscal.Year))) +    
     scale_x_discrete(
       name = "Month", 
       breaks = data$Month.Number,
       labels = data$Month.Name
     ) +
     scale_y_continuous();

但结果是从1月到12月按月排序的情节,而不是我想要的4月到3月。 我在scale_x_discrete中尝试过limit选项,但我认为这只是重新排序x轴标签,而不是实际数据。

你能帮我吗?

提前感谢您的回答!

2 个答案:

答案 0 :(得分:5)

您必须重新排序Month.Name的因子级别。假设df是您的data.frame:

df$Month.Name <- factor( df$Month.Name, levels = c( "Apr", "May", ..., "Feb", "Mar" ) )
g <- ggplot(data = df, aes(x = Month.Name, y = An) ) +
     geom_line(aes(group = Fiscal.Year, colour = factor(Fiscal.Year))) +    
     scale_x_discrete( name = "Month" ) +
     scale_y_continuous();

或者你可以改变Month.Number,使4月为1,5月为2,依此类推......

答案 1 :(得分:2)

在绘图之前运行:

data$Month.Number <- ((data$Month.Number+8) %% 12) + 1