我有一个这样的数据框:
数据框:
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()
我最终希望再次生成该图(注意:为简化起见,我的示例代码仅包含两个季节,而不是图像中的三个季节)。
答案 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()
我不确定为什么只使用level
而不是level
+ label
来改变行为。有人吗?