防止ggplot2自动排序x轴

时间:2015-05-13 14:18:16

标签: r ggplot2

我有以下示例数据集,它是用户在应用程序中选择的子集

cons_mergedAll <- structure(list(count = c(487L, 463L, 560L, 578L, 563L, 557L, 
65L, 48L, 324L, 447L, 166L, 108L, 351L, 301L, 389L, 384L, 333L, 
345L, 417L, 384L, 316L, 336L, 381L, 379L, 230L, 252L), type = c("open", 
"closed", "open", "closed", "open", "closed", "open", "closed", 
"open", "closed", "open", "closed", "open", "closed", "open", 
"closed", "open", "closed", "open", "closed", "open", "closed", 
"open", "closed", "open", "closed"), month = c(1, 1, 2, 2, 3, 
3, 4, 4, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 
12, 12), month_yr = c("2015 01", "2015 01", "2015 02", "2015 02", 
"2015 03", "2015 03", "2014 04", "2014 04", "2015 04", "2015 04", 
"2014 05", "2014 05", "2014 06", "2014 06", "2014 07", "2014 07", 
"2014 08", "2014 08", "2014 09", "2014 09", "2014 10", "2014 10", 
"2014 11", "2014 11", "2014 12", "2014 12"), month_yr2 = c("2015 Jan", 
"2015 Jan", "2015 Feb", "2015 Feb", "2015 Mar", "2015 Mar", "2014 Apr", 
"2014 Apr", "2015 Apr", "2015 Apr", "2014 May", "2014 May", "2014 Jun", 
"2014 Jun", "2014 Jul", "2014 Jul", "2014 Aug", "2014 Aug", "2014 Sep", 
"2014 Sep", "2014 Oct", "2014 Oct", "2014 Nov", "2014 Nov", "2014 Dec", 
"2014 Dec")), .Names = c("count", "type", "month", "month_yr", 
"month_yr2"), row.names = c(1L, 40L, 4L, 43L, 7L, 46L, 10L, 49L, 
13L, 52L, 15L, 54L, 18L, 57L, 21L, 60L, 24L, 63L, 27L, 66L, 30L, 
69L, 33L, 72L, 36L, 75L), class = "data.frame")

我正在尝试使用ggplot2执行条形图并阻止x-bar上的自动排序,但使用数据集上的顺序 我该怎么做呢

以下是我正在使用的示例代码

   cons_mergedAll <- cons_mergedAll[order(cons_mergedAll$month, cons_mergedAll$yr_report),]
   cons_mergedAll$month_yr2 <- factor(cons_mergedAll$month_yr2, ordered = T)
   ggplot(cons_mergedAll , aes( x=month_yr2 ,y=count, fill=type )) + geom_bar( stat="identity",position="dodge") +
     ylab("Number of Tickets") +   xlab("Month")

但仍然按字母顺序排序 - 我已检查herehere但仍然没有从2014年4月到2015年4月排序

2 个答案:

答案 0 :(得分:3)

这可能是一个选项

# Add a column with order, as per your requirement
cons_mergedAll$order = c(1:length(cons_mergedAll$count))

# use the added column to reorder() your data in ggplot
ggplot(cons_mergedAll , aes(reorder(month_yr2, order) ,count, fill=type )) +
geom_bar( stat="identity",position="dodge") +
ylab("Number of Tickets") +
xlab("Month")

enter image description here

答案 1 :(得分:2)

您似乎正在尝试使用ordered=TRUE将订单保留在原始文件中。这不是它的作用。而是使用levels=...并按照您想要的顺序为其提供级别。

cons_mergedAll <- cons_mergedAll[order(cons_mergedAll$month_yr),]
cons_mergedAll$month_yr2 <- factor(cons_mergedAll$month_yr2,
                                   levels=unique(cons_mergedAll$month_yr2))