R语言-ggplot2柱状堆叠图

来源:互联网 发布:Windows支持的文件系统 编辑:程序博客网 时间:2024/05/21 10:21

###导入数据

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)


#####上图


0 0
原创粉丝点击