我怎样才能按时间顺序在ggplot2中订购几个月?

时间:2016-03-15 19:14:40

标签: r ggplot2

我正在尝试绘制计数v / s月

ggplot(dat, aes(x=month, y=count,group=region)) +
    geom_line(data=mcount[mcount$region == "West coast", ],colour="black",stat="identity", position="dodge")+
     geom_point(data=mcount[mcount$region == "West coast", ],colour="black", size=2, shape=21, fill="white")+
     theme_bw()+
     theme(legend.key = element_rect(colour = "black")) +
     guides(fill = guide_legend(override.aes = list(colour = NULL)))+
     ggsave("test.png",width=6, height=4,dpi=300)

enter image description here

但是我想从1月到12月按时间顺序排列月份。如果没有写出所有月份的文章,我怎能做到这一点?

dput

structure(list(region = structure(c(6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 
3L), .Label = c("West coast", "Arizona", "Front range", "Flash flood alley", 
"Mississippi valley", "Appalachians"), class = "factor"), month = structure(c(1L, 
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 1L, 4L, 12L, 11L, 
5L, 2L, 9L, 8L, 6L, 10L, 3L, 7L, 8L, 10L, 5L, 1L, 6L, 7L, 4L, 
6L, 8L, 2L, 1L, 7L, 5L, 3L, 11L, 12L, 9L, 10L, 2L, 7L, 3L, 6L, 
12L, 11L, 10L, 9L, 4L, 1L, 11L, 4L, 2L, 1L, 12L, 9L, 3L, 8L, 
5L, 6L, 10L, 7L, 5L, 8L, 11L, 12L, 4L, 3L, 9L, 2L), .Label = c("Apr", 
"Dec", "Oct", "Mar", "May", "Jul", "Sep", "Jun", "Nov", "Aug", 
"Jan", "Feb"), class = "factor"), count = c(566, 545, 427, 751, 
357, 399, 568, 433, 454, 347, 511, 251, 267, 207, 167, 142, 417, 
109, 117, 373, 207, 130, 125, 145, 7, 14, 2, 2, 7, 3, 107, 74, 
135, 48, 80, 53, 117, 125, 59, 53, 103, 30, 21, 18, 8, 22, 26, 
37, 20, 5, 11, 1, 96, 29, 109, 8, 33, 53, 6, 1, 5, 0, 0, 0, 0, 
0, 0, 0, 0, 0, 0, 0)), .Names = c("region", "month", "count"), row.names = c(NA, 
-72L), class = c("data.table", "data.frame"))

1 个答案:

答案 0 :(得分:18)

使用内置的month.namemonth.abb变量以正确的顺序指定因子的级别。在这种情况下,您有缩写,因此month.abb是合适的。

your_data$month = factor(your_data$month, levels = month.abb)

我认为以正确的顺序创建因子是最好的方法,但您也可以使用离散比例的limits参数对轴进行排序(有关详细信息,请参阅?discrete_scale)。 / p>

+ scale_x_discrete(limits = month.abb)

编辑:如果您使用的是非英语语言环境,则可以使用一点日期格式构建自己的月份名称常量(基本上是从Brian Ripley in this R-Help thread中窃取的):

 month.name.loc = format(ISOdate(2004, 1:12, 1), "%B")
 month.abb.loc  = format(ISOdate(2004, 1:12, 1), "%b")