我想使用ggplot2繪製條形圖,以便條形具有相同的寬度。 我有以下數據集。ggplot2 barplot相同寬度
sexratio=c("0%male","0%male","0%male","0%male","25%male","25%male","50%male","50%male" ,"75%male","75%male","100%male","100%male","100%male", "100%male")
Trainsize=c("Ts130","Ts260","Ts520","Ts1040","Ts130", "Ts1040","Ts130", "Ts1040", "Ts130", "Ts1040","Ts130", "Ts260", "Ts520", "Ts1040")
Dm1=c(354.7015, 362.6982, 369.8013, 380.7233, 363.2208, 415.8980, 367.2899, 413.7292, 365.1060, 409.1913, 366.9871, 377.3490, 389.0739, 400.5590)
mydata=data.frame(Trainsize,sexratio,Dm1)
#Reorder the fators
mydata$sexratio<−factor(mydata$sexratio,levels(mydata$sexratio)[c(2:4,1)])
mydata$Trainsize<- factor(mydata$Trainsize,levels(mydata$Trainsize)[c(2:4,1)])
我用下面的代碼繪製的情節,但要注意,棒材Ts260和Ts520的寬度都較大。
p2<- ggplot(mydata, aes(x=Trainsize, y=Dm1, fill=sexratio)) +geom_bar(stat="identity", color="black",position=position_dodge()) +
geom_errorbar(aes(ymin=Dm1-10, ymax=Dm1+10), width=.2,position=position_dodge(.9))
因此,我包括NA爲Ts260和Ts520的缺失值,並重繪該圖。
require(utils)
dat<-expand.grid(sexratio= c("25%male","50%male","75%male"), Trainsize= c("Ts260","Ts520"))
dat$Dm1<- NA
mydata<- rbind(mydata,dat)
p2<- ggplot(mydata, aes(x=Trainsize, y=Dm1, fill=sexratio)) +
geom_bar(stat="identity", color="black",
position=position_dodge()) +
geom_errorbar(aes(ymin=Dm1-10, ymax=Dm1+10), width=.2,
position=position_dodge(.9))
現在的問題是如何減少Ts260,Ts520之間0%男性和100%男性之間的空間。
或者我如何繪製因子TS的水平之間的垂直線;即在Ts130,Ts260,Ts520,Ts1040處有四條垂直線。
是的,這就是我想要的。感謝Setye,致以最誠摯的問候 – setye