连续几个月重新排序因子水平

时间:2018-11-08 18:56:18

标签: r ggplot2

我有一个这样的数据框:

数据框:

 df<- data.frame(station= as.factor(rep("a", 12)), 
            month= as.character(c("Apr", "Aug", "Dec", "Feb", "Jan", "Jul",
                                                                  "Jun", "Mar", "May", "Nov", "Oct", "Sep")), 
            mean= rnorm(12, 300, 10), sd= rnorm(12, 300, 1), season= c(rep("wet", 6), rep("dry", 6)))

我想按连续顺序对月份进行重新排序,以便在我输入ggplot函数时,每个月的数据都以日历顺序出现。

订购失败:

df$month<-factor(df$month, levels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

我以前已经做到这一点,并使用下面的代码来获取后续输出,但是我一路上擦除了一些内容,并认为错误的根源在于排序不正确:

上一个输出:

p<
  ggplot(df, aes(x = month, y=mean, fill=season)) + 
  geom_bar(stat="identity", color="black", 
       position=position_dodge()) +
  geom_errorbar(aes(ymin=mean-se, ymax=mean+se), width=.2,
             position=position_dodge(.9)) 
 p +labs(x="Month", y = "Precipitation (mm)") +
  theme_bw()+
  theme(legend.title = element_blank(),legend.text=element_text(size=15),legend.position="top",title= element_text(size=20), axis.text= element_text(size=10, face = "bold"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
   panel.background = element_blank(), axis.line = element_line(colour = "black")) +
  coord_flip()

enter image description here

我最终希望再次生成该图(注意:为简化起见,我的示例代码仅包含两个季节,而不是图像中的三个季节)。

1 个答案:

答案 0 :(得分:0)

您快到了。这样的事情应该可以工作:

df<- data.frame(station= as.factor(rep("a", 12)), 
                month= as.character(c("Apr", "Aug", "Dec", "Feb", "Jan", "Jul",
                                      "Jun", "Mar", "May", "Nov", "Oct", "Sep")), 
                mean= rnorm(12, 300, 10), se= rnorm(12, 10, 1), season= c(rep("wet", 6), rep("dry", 6)))



mon <- rev(c("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))

p<- ggplot(df, aes(x = factor(month, levels= mon, labels = mon), y=mean, fill=season)) + 
  geom_bar(stat="identity", color="black", position=position_dodge()) +
  geom_errorbar(aes(ymin=mean-se, ymax=mean+se), width=.2, position=position_dodge(.9)) 

p +labs(x="Month", y = "Precipitation (mm)") +
  theme_bw()+
  theme(legend.title = element_blank(),legend.text=element_text(size=15),legend.position="top",title= element_text(size=20), axis.text= element_text(size=10, face = "bold"), panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black")) + 
  coord_flip()

enter image description here

我不确定为什么只使用level而不是level + label来改变行为。有人吗?

相关问题