如何停止ggplot自动排列图表?

时间:2014-05-23 11:44:24

标签: r ggplot2

我使用ggplot包在R中制作了一个分组的条形图。我使用了以下代码:

ggplot(completedDF,aes(year,value,fill=variable)) + geom_bar(position=position_dodge(),stat="identity")

图表看起来像这样:

enter image description here

问题在于我希望1999 - 2008年的数据能够结束。

无论如何移动它?

感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

ggplot将遵循因子中的级别顺序。如果您没有订购您的因子,则假定订单是按字母顺序排列的。

如果你想要你的" 1999-2008"最终的模态,只需使用

重新排序您的因素
completed$year <-  factor(x=completed$year, 
                          levels=c("1999-2002", "2002-2005", "2005-2008", "1999-2008"))

例如:

library(ggplot2)

# Create a sample data set
set.seed(2014)

years_labels <- c( "1999-2008","1999-2002", "2002-2005", "2005-2008")
variable_labels <- c("pointChangeVector", "nonPointChangeVector", 
                     "onRoadChangeVector", "nonRoadChangeVecto")

years <- rbinom(n=1000, size=3,prob=0.3)
variables <- rbinom(n=1000, size=3,prob=0.3)

year <- factor(x=years , levels=0:3, labels=years_labels)
variable <- factor(x=variables , levels=0:3, labels=variable_labels)

completed <- data.frame( year, variable)

# Plot
ggplot(completed,aes(x=year, fill=variable)) + geom_bar(position=position_dodge())

Unordered x label

# change the order
completed$year <-  factor(x=completed$year, 
                          levels=c("1999-2002", "2002-2005", "2005-2008", "1999-2008"))

ggplot(completed,aes(x=year, fill=variable)) + geom_bar(position=position_dodge())

ordered x label

此外,使用此功能的另一个好处是,您的结果也可以很好地用于summaryplot等其他功能。

有帮助吗?

答案 1 :(得分:1)

是的,这是ggplot中的一个真正的问题。它总是改变非数值的顺序

解决问题的最简单方法是以这种方式添加scale_x_discrete

p <- ggplot(completedDF,aes(year,value,fill=variable))
p <- p + geom_bar(position=position_dodge(),stat="identity")
p <- p + scale_x_discrete(limits = c("1999-2002","2002-2005","2005-2008","1999-2008"))