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语言的代码,这里的颜色全是黑色