1. 程式人生 > >R語言-ggplot2柱狀堆疊圖

R語言-ggplot2柱狀堆疊圖

###匯入資料

load("D:\\R\\futures_user_2.dat")


####提取需要畫圖的資料
a=futures_user_2[,c(1,2,5)]

####對部分錯誤的資料進行修改

a$province[which(a$province=="廣西桂林")]<-"廣西"


######去除空置和null
b=a[-which(is.na(a$province)),]
unique(b$province)
c=b[-which(b$province=="null"),]
unique(c$province)
head(c)


####如果有==0的,需要剔除
d=c[-which(c$avg_return_rate==0),]

#####進行分類
c$class=ifelse(c$avg_return_rate>0,"盈利","虧損")

######用tapply進行分組計算
d=tapply(c$id,list(c$province,c$class),length)
d=as.data.frame(d)
###提取省份名稱(tapply無法選取分類組的名稱,沒找到原因)
e=unique(c$province)
f=e[order(e)]
d$省份=f
  

####將空值賦值為0
d$虧損[which(is.na(d$虧損))]<-0
d$盈利[which(is.na(d$盈利))]<-0
d

######排序
g=d[order(d$盈利,decreasing = TRUE),]


#####提取
aa=g[,c(3,2)]
aa$盈虧<-rep("盈利",times=length(aa$省份))
names(aa)<-c("省份","人數","盈虧")
head(aa)


bb=g[,c(3,1)]
bb$盈虧<-rep("虧損",times=length(bb$省份))
names(bb)<-c("省份","人數","盈虧")
head(bb)

cc<-rbind(aa,bb)

cc$盈虧=factor(cc$盈虧,levels=c("盈利","虧損"))

cc=cc[order(cc$人數,decreasing = TRUE),]



####定義順序
order=g$省份
cc$省份<-factor(cc$省份,levels=order)


###畫圖
p1=ggplot(cc,aes(省份,weight=人數,fill=盈虧))+geom_bar(position="stack")+labs(title="各省份盈虧人數分佈",y="人數")+theme(plot.title = element_text(size=20,face = "bold"),axis.text.y=element_text(size=15),axis.text.x=element_text(size=10),axis.title.y=element_text(size=15,face="bold"),axis.title.x=element_text(size=15,face="bold"))
p1

####儲存

ggsave(p1, file="D:\\R\\各省份盈虧人數分佈.jpg", width=15, height=8)

#####上圖