R语言的ggplot2绘制多个分组簇状柱状图

R语言的ggplot2绘制多个分组簇状柱状图

今天要分享的是ggplot2去绘制多个分组簇状柱状图,话不多说,现在开始吧:

老规矩,还是先看数据和最终的效果图,进行解释后,再说明如何绘制


可以明显看到,图代表的意思是不同年龄组、性别的高血压和糖尿病的患病率

年龄是x轴的分组,性别是堆积块的分组,疾病是分页的分组(也就是高血压一张图,糖尿病一张图),图中的数据是患病率。

所以,画图的前提是先把数据整理成4列,然后自己分清每一列变量代表哪里,最好,自己手画一下大概的情况,接着再进行画图。

 

下面是具体的操作流程:

注意:R语言里面 # 代表的是备注

我出现两个 ## 的备注就是你需要更改的部分

.libPaths()

setwd("F:/02学习/代码/02R代码/数据")#设置工作空间

getwd()#加载工作空间

 

#加载包

library(ggplot2)

library(tidyr) #pivot_longer()

library(dplyr) #mutate()、case_when()、管道符

library(tibble) #rownames_to_column()

library(ggrepel)#含geom_text_repel,作用不让标签重叠

#导入数据

data1<-read.csv("F:/02学习/代码/02R代码/数据/分组柱状图.csv",##这里需要更改工作路径

                as.is = TRUE,header = T,sep =",", fileEncoding='utf-8')

#先看下数据

data1

#采用mutate()设计分组变量里面数据的顺序

data1 <- rbind(data1)%>%#必须写上这个行行合并的函数

 ##这里我列出我的三个分组变量里面数据的顺序

 ##比如下面的年龄,变量名是”年龄“,希望的顺序是"60岁以下","60岁以上"

 ##然后粘贴到函数mutate,如下

 ##年龄:60岁以下/60岁以上

 mutate(年龄 = factor(年龄, levels = c("60岁以下",

                                   "60岁以上"

 )))%>%

 ##同样上面的操作

 ##性别:男/

 mutate(性别 = factor(性别, levels = c(

   "男","女"

 ))) %>%

 ##同样上面的操作

 ##疾病:高血压/糖尿病

 mutate(疾病 = factor(疾病, levels = c(

   "高血压",   "糖尿病"

 )))

 

 

#然后画柱状堆积图,采用geom_bar组件

##x=代表x轴的分组,这里我选年龄

##y=代表数据那一列,这里是  患病率那一列

##fill= 代表每个图里面的柱状堆积块的分组,这里我选  性别,同时这个后面需要创建图例

p1<-ggplot(data = data1, aes(x=年龄, y = 患病率, fill = 性别)) +#这里就是1张图的工作

 geom_bar(stat="identity", color = "black", size =0.55, width = 0.7)+

 facet_wrap(~疾病)+ ##这里设置分页,就是多张图,这里的分组变量我选疾病

 ##为不同类别设置颜色

 ##下面这个是设置柱状堆积块,每一块的颜色,因为前面是用的性别

 ##那么就需要定义 "男" 和 "女"的颜色

 scale_fill_manual(

   values = c("男" = "#bd2628",

               "女" = "#caeaf0"))

#查看

p1


#接着进一步美化

p2<-p1+

 theme_bw()+ #移除灰色背景

 ylab("比例")+ #设置Y轴标题

 scale_y_continuous(labels = seq(0, 100, 25)) + #设置Y轴标签

 guides(fill = guide_legend(keyheight = 1.75, #图例高度

                             keywidth =0.5,  #图例宽度

                             title ="Age", ##这里修改图例标题,前面选择的是性别

                             label.theme =element_text(size=10)))+ #设置标签字体大小

 theme(

   axis.text.x = element_text(angle = 0, hjust = 0.5, vjust = 0.5,

                               colour ="black", size = 8),

   #设置X轴标签字体角度、对齐方向、颜色大小

   axis.text.y = element_text(colour = "black", size = 11), #设置y轴标签字体颜色、大小

   axis.title.x = element_blank(), #移除x轴标题

   strip.background = element_rect(fill = c("#e7e7e7")), #修改分页背景

   strip.text.x = element_text(size = 13), #设置分页标签字体大小

   panel.border = element_rect(linewidth = 1.1), #设置边框粗细

   panel.grid = element_blank() #删除背景网格

 )+

 ##这里需要将  患病率 数据加到图上

 geom_text(aes(label=患病率),

           position=position_stack(vjust=0.5),hjust=0.5,

            size=3)#增加数据到图上

       #position=position_stack()作用是将数据对应到相应的图块部分

#查看

p2

#保存图片

ggsave(filename = "0-2.png",#命名

      plot=p2,#哪张图

      path = "C:/Users/12974/Desktop/百度经验/简书/R语言绘制多个分组簇状柱状图",

      #保存路径

      units="px",

      width = 1200,#宽度

      height = 600 #高度

      )

评论区给出数据和R语言的代码,这里的颜色全是黑色

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容