R绘制单纯堆积 按比例堆积和分散柱状图

上一期已经分享了R如何绘制多组堆积簇状柱状图,其实上一期的默认的是单纯堆积图,这一期将进一步区别单纯堆积按比例堆积和分散柱状图如何绘制。

其实ggplot2具体的代码只是区别在于position的选项不一样而已:

position=stack 单纯堆积;增加标签时,用position_stack

position=fill   按比例堆积;增加标签时,用position_fill

position=dodge 分散;增加标签时,用position_dodge

图1数据情况如下:

因此,最后的图是绘制不同性别的高血压、糖尿病的患病率

结果图有三张:大家可以对比一下,下面的代码就会依次实现下面三种情况

.libPaths()

setwd("C:/Users/12974/Desktop/百度经验/01简书/02R语言绘分组簇状柱状图/R绘制单纯堆积 按比例堆积和分散柱状图")#设置工作空间
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("C:/Users/12974/Desktop/百度经验/01简书/02R语言绘分组簇状柱状图/R绘制单纯堆积 按比例堆积和分散柱状图/data.csv",##这里需要更改工作路径
                as.is = TRUE,header = T,sep = ",", fileEncoding='utf-8')
#先看下数据
data1

##    性别   疾病    患病率
## 1   女   高血压     30
## 2   女   糖尿病     30
## 3   男   高血压     60
## 4   男   糖尿病     40

#然后画柱状堆积图,采用geom_bar组件
##x=代表x轴的分组,这里我选 性别
##y=代表数据那一列,这里是  患病率 那一列
##fill= 代表每个图里面的柱状堆积块的分组,
  #这里我选  疾病,同时这个后面需要创建图例
p1<-ggplot(data = data1, aes(x=性别, y = 患病率, fill = 疾病)) +
  ##为不同类别设置颜色
  ##下面这个是设置柱状堆积块,每一块的颜色,因为前面是用的疾病
  ##那么就需要定义 "高血压" 和 "糖尿病"的颜色
  scale_fill_manual(
    values = c("高血压" = "#bd2628",
               "糖尿病" = "#caeaf0"))

#单纯堆积,默认
p1+geom_bar(stat="identity", color = "black", size = 0.55, width = 0.7,
         position = "stack")+
  geom_text(aes(label=患病率),
            position=position_stack(vjust=0.5))

可以看到单纯堆积是按照原始数据来的,纵坐标就是原始数据

#按比例堆积
p1+geom_bar(stat="identity", color = "black", size = 0.55, width = 0.7,
            position = "fill")+
  geom_text(aes(label=患病率),
            position=position_fill(vjust=0.5))

可以看到按比例堆积是按照原始数据总和的比例来的,纵坐标一直是0~1。

比如男性的高血压和糖尿病分别是40和60,那么高血压占比40%,即0.4;糖尿病占比60%,即0.6;

男性的高血压和糖尿病分别是30和30,那么高血压和糖尿病均占比50%,即0.5;

#分散柱状图
p1+geom_bar(stat="identity", color = "black", size = 0.55, width = 0.7,
            position = "dodge")+
  geom_text(aes(label=患病率),
            position=position_dodge(width=0.7),vjust=-0.5,hjust=0.5)

可以看到分散堆积也是按照原始数据来的,纵坐标就是原始数据,只是柱子分开了,而不是堆积

今天的分享就到这里,所需要的数据,大家可以自己按照图1写一下,也没有多少。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

kaiming0000

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

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

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

打赏作者

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

抵扣说明:

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

余额充值