R绘图(01)——ggplot画柱状图和多图拼接

数据集形式:

 

目标构想:

需要使用到的变量为ICEWSGOVT_bin(GV), ICEWSNGOVT_bin(NGV),Year_F(Y),GrowingSeason_Month(GSM),共4个变量。其中第一和第二变量为1和0的名义变量,需要完成的事情是,根据GSM作为分类条件,统计随着Y的改变,GV和NGV的为1的个数。

因为由两个数据库,每个数据库包含GSM=1和GSM=0的两种条件,故而总共存在4张图片,随后需要将4张图片排列在一张图片上。

 

实现路径(我的菜鸟思维):

1.从绘画一个图开始,绘画柱状图需要准备好表格数据,所以应该准备好绘图的数据,绘画一张直方图,目标数据格式如图

 

 2.为了准备这个表格,就需要根据条件筛选数据,再汇总数据整理成为表格,这就涉及到分类、分组计算。所以目标是将大数据库整理成目标表格的格式。

3.获得数据库之后,就可以对图进行美化和调整,因为不设置各类参数的话,默认输出图片不太符合主流投稿或者写文的规范(例如灰色底色,没有坐标轴等)。

3.绘画好了一张图,就可以效仿绘制剩下的图,最后排版。

 

最终实现效果如图:

 

 

具体实现的代码(无数据路径版本):

复制代码
library(reshape2)
ICE<-Data_ICEWS_Trim
ACL<-Data_ACLED_Trim

#######准备目标表格的数据##### #######data base - ICE ######
var<-c("ICEWSGOVT_bin","ICEWSNGOVT_bin","Year_F","GrowingSeason_Month") new<-ICE[var] colnames(new) <- c("GOVT","NGOVT","YEAR","GSM") sums_1 <- matrix(NA, nrow=8, ncol=3) sums_0 <- matrix(NA, nrow=8, ncol=3) for (i in 1:8){ sums_1[i,1] <- i+2010 sums_1[i,2] <- sum(new$GOVT[new$YEAR==i+2010&new$GSM==1]) sums_1[i,3] <- sum(new$NGOVT[new$YEAR==i+2010&new$GSM==1]) } for (i in 1:8){ sums_0[i,1] <- i+2010 sums_0[i,2] <- sum(new$GOVT[new$YEAR==i+2010&new$GSM==0]) sums_0[i,3] <- sum(new$NGOVT[new$YEAR==i+2010&new$GSM==0]) } sums_1<-as.data.frame(sums_1) sums_0<-as.data.frame(sums_0) colnames(sums_1)<-c("YEAR","GOV","NGOV") colnames(sums_0)<-c("YEAR","GOV","NGOV") varc<-c("YEAR") rs_data1<- melt(sums_1, id.vars = varc) rs_data0<- melt(sums_0, id.vars = varc) ###### data base - ACL ###### var2<-c("acledGOVT_bin","acledNGOVT_bin","Year_F","GrowingSeason_Month") new<-ACL[var2] colnames(new) <- c("GOVT","NGOVT","YEAR","GSM") Asums_1 <- matrix(NA, nrow=3, ncol=3) Asums_0 <- matrix(NA, nrow=3, ncol=3) for (i in 1:3){ Asums_1[i,1] <- i+2016 Asums_1[i,2] <- sum(new$GOVT[new$YEAR==i+2016&new$GSM==1]) Asums_1[i,3] <- sum(new$NGOVT[new$YEAR==i+2016&new$GSM==1]) } for (i in 1:3){ Asums_0[i,1] <- i+2016 Asums_0[i,2] <- sum(new$GOVT[new$YEAR==i+2016&new$GSM==0]) Asums_0[i,3] <- sum(new$NGOVT[new$YEAR==i+2016&new$GSM==0]) } Asums_1<-as.data.frame(Asums_1) Asums_0<-as.data.frame(Asums_0) colnames(Asums_1)<-c("YEAR","GOV","NGOV") colnames(Asums_0)<-c("YEAR","GOV","NGOV") Ars_data1<- melt(Asums_1, id.vars = varc) Ars_data0<- melt(Asums_0, id.vars = varc) #####绘图##### library(ggplot2) library(ggpubr) ICE_1<-ggplot(rs_data1,aes(x=YEAR,y=value,fill=variable))+geom_bar(position="dodge",stat="identity") ICE_1<-ICE_1+ylab("Number")+labs(fill="Type",subtitle = "GSM=1") ICE_1<-ICE_1+ theme_bw()+theme(panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor =element_blank(),axis.line = element_line(colour = "Black")) ICE_1<-ICE_1+scale_y_continuous(limits =c(0, 200) ,expand = c(0,0))+scale_x_continuous(breaks = seq(2011, 2018, by = 1)) ICE_0<-ggplot(rs_data0,aes(x=YEAR,y=value,fill=variable))+geom_bar(position="dodge",stat="identity") ICE_0<-ICE_0+ylab("Number")+labs(fill="Type",subtitle = "GSM=0") ICE_0<-ICE_0+ theme_bw()+theme(panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor =element_blank(),axis.line = element_line(colour = "Black")) ICE_0<-ICE_0+scale_y_continuous(limits =c(0, 200) ,expand = c(0,0))+scale_x_continuous(breaks = seq(2011, 2018, by = 1)) ACL_1<-ggplot(Ars_data1,aes(x=YEAR,y=value,fill=variable))+geom_bar(position="dodge",stat="identity") ACL_1<-ACL_1+ylab("Number")+labs(fill="Type",subtitle = "GSM=1") ACL_1<-ACL_1+ theme_bw()+theme(panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor =element_blank(),axis.line = element_line(colour = "Black")) ACL_1<-ACL_1+scale_y_continuous(limits =c(0, 700) ,expand = c(0,0))+scale_x_continuous(breaks = seq(2017, 2019, by = 1)) ACL_0<-ggplot(Ars_data0,aes(x=YEAR,y=value,fill=variable))+geom_bar(position="dodge",stat="identity") ACL_0<-ACL_0+ylab("Number")+labs(fill="Type",subtitle = "GSM=0") ACL_0<-ACL_0+ theme_bw()+theme(panel.border = element_blank(),panel.grid.major = element_blank(),panel.grid.minor =element_blank(),axis.line = element_line(colour = "Black")) ACL_0<-ACL_0+scale_y_continuous(limits =c(0, 700) ,expand = c(0,0))+scale_x_continuous(breaks = seq(2017, 2019, by = 1)) ggarrange(ICE_1, ICE_0, ACL_1, ACL_0, labels = c("A", "B", "C","D"),ncol = 2, nrow = 2)
复制代码

 

posted @   MUJIU  阅读(1434)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示