首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >双变量条形图的3种形态代码大全

双变量条形图的3种形态代码大全

作者头像
小洁忘了怎么分身
发布2025-12-16 14:25:10
发布2025-12-16 14:25:10
1470
举报
文章被收录于专栏:生信星球生信星球

公众号里的文章大多数需要编程基础,如果因为代码看不懂,而跟不上正文的节奏,可以来找我学习,相当于给自己一个新手保护期。我的课程都是循环开课,点进去咨询微信,随时可以报名↓ 生信分析直播课程(每月初开一期) 生信新手保护学习小组长期报名中(每月一期) 单细胞陪伴学习小组(每月一期)

0. 背景知识

这篇推文的来源又是我那可爱的学生想要,刚好有空,可以整理一下。

条形图是一种常见的数据可视化工具,它通过长方形的长度来表示数据的大小。在实际应用中,条形图有多种形态,不只是展示比例,还可以展示数量,每种形态都有其独特的使用场景,应该系统地都学一学。

比例堆积条形图,主要用于展示不同类别在总体中所占的比例关系。当我们想要了解各个部分在整体中所占的份额时,这种图表能够清晰地呈现出各部分之间的相对比例。例如,做ciborsort免疫浸润时,可以用比例堆积条形图展示不同的免疫细胞在每个样本中的占比。

计数堆积条形图,则侧重于展示不同类别在各个分组下的数量总和。它能够直观地呈现出每个分组中不同类别的数量分布,体现每个分组中各类别对总量的贡献。

计数并列条形图,适合用于比较不同类别在各个分组下的数量差异。通过将不同类别的条形并列放置,可以看到每个分组中不同类别的数量对比情况。

1. 示例数据

1.1 diamonds 数据简介

我们选用的是ggplot2 内置的 diamonds 数据集,它是一个关于钻石相关信息和价格的数据集,共有 53940 行,10 列。这个数据集涵盖了钻石的多个重要属性,为我们通过条形图展示数据提供了丰富的素材。

代码语言:javascript
复制
library(ggplot2)
str(diamonds)
代码语言:javascript
复制
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
##  $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
1.2 关键列说明

在绘制这三种条形图时,我们主要用到了 diamonds 数据集中的 cut(切工)和 color(颜色)两列。

cut是切工,分Fair(一般)、Good(好)、Very Good(非常好)、Premium(优质)、Ideal(理想)五个等级,每个等级对应的钻石数量统计如下。

代码语言:javascript
复制
table(diamonds$cut)
代码语言:javascript
复制
## 
##      Fair      Good Very Good   Premium     Ideal 
##      1610      4906     12082     13791     21551

color是颜色,按照字母标识,数量统计如下。

代码语言:javascript
复制
table(diamonds$color)
代码语言:javascript
复制
## 
##     D     E     F     G     H     I     J 
##  6775  9797  9542 11292  8304  5422  2808

2. 三种条形图的代码

2.1 比例堆积条形图
代码语言:javascript
复制
library(dplyr)
meta_pct <- diamonds %>% 
  count(cut, color) %>% 
  group_by(cut) %>% 
  mutate(pct = n / sum(n))
p1 <- ggplot(meta_pct, aes(cut, pct, fill = color)) +
  geom_bar(stat = "identity") +
  theme_classic()
p1

geom_bar()会自动统计每个cut组中不同color的数量,只需提供横坐标和纵坐标中的一个,两个都提供就会报错。加上参数stat = "identity"表示数据无需统计,直接以提供的横纵坐标来画图。

2.2 计数堆积条形图
代码语言:javascript
复制
p2 <- ggplot(diamonds, aes(cut, fill = color)) +
  geom_bar() +
  theme_classic()
p2

geom_bar()会自动统计每个cut组中不同color的数量,实现计数功能。

2.3 计数并列条形图
代码语言:javascript
复制
p3 <- ggplot(diamonds, aes(cut, fill = color)) +
  geom_bar(position = "dodge") +
  theme_classic() 
p3

关键参数是position = "dodge",它的作用是将不同颜色的柱子并列放置,实现计数并列。

3. 拼图

代码语言:javascript
复制
library(patchwork)
p1 + p2 + p3 + plot_layout(guides='collect')
代码语言:javascript
复制
(p1 + p2) / p3 + plot_layout(guides='collect')

从拼接好的图形中,我们可以更加直观地对比三种条形图的特点,选择更适合的,化为己用。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-12-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信星球 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0. 背景知识
  • 1. 示例数据
    • 1.1 diamonds 数据简介
    • 1.2 关键列说明
  • 2. 三种条形图的代码
    • 2.1 比例堆积条形图
    • 2.2 计数堆积条形图
    • 2.3 计数并列条形图
  • 3. 拼图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档