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 #高度

       )

               

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kaiming0000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值