Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >R可视化:不一样的ggplot2箱线图

R可视化:不一样的ggplot2箱线图

原创
作者头像
生信学习者
发布于 2024-07-01 14:43:49
发布于 2024-07-01 14:43:49
772010
代码可运行
举报
运行总次数:10
代码可运行

欢迎大家关注全网生信学习者系列:

  • WX公zhong号:生信学习者
  • Xiao hong书:生信学习者
  • 知hu:生信学习者
  • CDSN:生信学习者2

介绍

使用 ggplot2 包画箱线图通常使用 geom_boxplot() 函数。箱线图(Boxplot)是一种用于展示一组数据分布特征的图形,它能够提供以下信息:

  1. 中位数:箱线图中的中位线表示数据的中位数。
  2. 四分位数:箱线图的箱子部分表示数据的四分位数范围,即25%和75%分位数,这可以展示数据的中间50%的分布情况。
  3. 异常值:箱线图通常会用点来表示异常值,即那些远离数据主体的值。
  4. 最小值和最大值:在某些箱线图中,除了四分位数之外,还会展示最小值和最大值(不包括异常值)。
  5. 数据的偏斜性:箱线图的形状可以揭示数据的偏斜性。如果箱子是对称的,那么数据可能接近正态分布;如果箱子倾斜,则数据可能偏斜。

箱线图非常适合用于比较不同组别的数据分布情况,例如,比较不同治疗方法的效果,或者不同群体的某个指标的分布。

在ggplot2 中,可以通过使用 geom_point() 来在箱线图上增加点,这些点可以代表分组中特定指标的出现率。

网格状箱线图

patternplot 是一个 R 包,它提供了创建网格状箱线图的功能,这种图表通常用于展示多个组别或条件下的数据分布。patternplot 包的 pattern_boxplot() 函数可以生成这样的图形,它允许用户在网格中为每个子集绘制箱线图,从而可以直观地比较不同组别或条件下的数据。下面是box1参数的详细解释:

  • data: 包含要展示的数据的数据框。
  • x: 箱线图的 x 轴变量,通常是分组的因子。
  • y: 箱线图的 y 轴变量,表示要展示的数值数据。
  • group: 分组变量,用于区分不同的箱线图。
  • pattern.type: 指定图案的类型,可以是 "lattice"(格子)或其他。
  • pattern.line.size: 图案线条的粗细。
  • label.size: x 轴上分组标签的字体大小。
  • pattern.color: 图案的颜色。
  • background.color: 图表背景颜色。
  • frame.color: 图表框架的颜色。
  • density: 密度参数,可能用于调整箱线图内密度图的显示。
  • legend.h: 图例的高度。
  • legend.x.pos 和 legend.y.pos: 图例在图表中的位置。
  • legend.pixel: 图例中图案的像素大小。
  • legend.w: 图例的宽度。
  • legend.label: 图例的标签,用于说明不同图案代表的组别或条件。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(patternplot)
library(png)
library(ggplot2)
library(gridExtra)
​
data <- read.csv(system.file("extdata", "fruits.csv", package = "patternplot"))
group <- data$Fruit
y <- data$Weight
x <- data$Store
​
pattern.type <- c('nwlines', 'blank', 'waves')
pattern.color <- c('black','black', 'black')
background.color <- c('white','gray80', 'white')
frame.color <- c('black', 'black', 'black')
pattern.line.size <- c(6, 1,6)
density <- c(6, 1, 8)
​
​
box1 <- patternboxplot(
  data, x, y, group = group,
  pattern.type = pattern.type,
  pattern.line.size = pattern.line.size, 
  label.size = 3, 
  pattern.color = pattern.color, 
  background.color = background.color,
  frame.color = frame.color,
  density = density,  
  legend.h = 2, 
  legend.x.pos = 1.075, 
  legend.y.pos = 0.499, 
  legend.pixel = 10,
  legend.w = 0.18, 
  legend.label = c("Orange","Strawberry","Watermelon")) +
  ggtitle('(A) Boxplot with Black and White Patterns')
​
pattern.color <- c('black','white', 'grey20')
background.color <- c('gold','lightpink', 'lightgreen')
​
box2 <- patternboxplot(
  data, x, y, group = group,
  pattern.type = pattern.type,
  pattern.line.size = pattern.line.size, 
  label.size = 3,
  pattern.color = pattern.color, 
  background.color = background.color,
  frame.color = frame.color, 
  density = density,
  legend.h = 2, 
  legend.x.pos = 1.075, 
  legend.y.pos = 0.499, 
  legend.pixel = 10,
  legend.w = 0.18, 
  legend.label = c("Orange","Strawberry","Watermelon")) +
  ggtitle('(B) Boxplot with Colors and Patterns')
​
grid.arrange(box1, box2, nrow = 1)

结果:不同网格展示的分组的箱线图

加载R包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
library(tidyverse)
library(ggplot2)rm(list = ls())
options(stringsAsFactors = F)

导入数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data("iris")head(iris)

Sepal.Length<dbl>

Sepal.Width<dbl>

Petal.Length<dbl>

Petal.Width<dbl>

Species<fctr>

1

5.1

3.5

1.4

0.2

setosa

2

4.9

3.0

1.4

0.2

setosa

3

4.7

3.2

1.3

0.2

setosa

4

4.6

3.1

1.5

0.2

setosa

5

5.0

3.6

1.4

0.2

setosa

6

5.4

3.9

1.7

0.4

setosa

处理数据

  • 选择Sepal.Length指标和Species分组
  • 计算Sepal.Length在每个分组的出现率和对应画图位置坐标
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plotdata <- iris |>
  dplyr::select(Sepal.Length, Species) |>
  dplyr::mutate(Species = factor(Species, c("setosa", "versicolor", "virginica"))) |>
  dplyr::rename(Group = Species,
                Index = Sepal.Length) 
​
occ_cutoff <- 5.2
​
occ_fun <- function(x) {
  return(round(length(x[x > occ_cutoff])/length(x), 4))
}
​
plotOcc <- plotdata |>
  dplyr::group_by(Group) |>
  dplyr::summarise(occ = occ_fun(Index)) |>
  dplyr::mutate(occ_lab = paste0(occ * 100, "%")) |>
  dplyr::mutate(position = min(plotdata$Index) - min(plotdata$Index) * 0.1)head(plotOcc)

Group<fctr>

occ<dbl>

occ_lab<chr>

position<dbl>

setosa

0.22

22%

3.87

versicolor

0.90

90%

3.87

virginica

0.98

98%

3.87

画图:更多代码都来自于 https://mp.weixin.qq.com/s/d2Xht6sC7-P6ZqgTqFf13g

采用ggplot2的画图,下面是代码的逐行解析:

  1. ggplot(data = plotdata, aes(x = Group, y = Index, color = Group))
    • 初始化一个 ggplot 对象,使用 plotdata 数据框,并设置分组变量 Group 映射到 x 轴,指标 Index 映射到 y 轴,同时 Group 映射到颜色,用于区分不同组的颜色。
  2. stat_boxplot(geom = "errorbar", width = 0.15)
    • 添加一个箱线图的统计变换,这里使用 errorbar 几何对象,宽度设置为 0.15,这可能是用来表示箱线图的中位数线或四分位数范围的误差条。
  3. geom_boxplot(width = .4, outlier.shape = NA)
    • 添加一个箱线图几何对象,箱子的宽度设置为 0.4,并且移除异常值(outliers)的点。
  4. geom_point(size = 2, shape = 5)
    • 在箱线图上添加点,大小为 2,形状为 5(通常是一个星号)。
  5. labs(x = "")
    • 设置 x 轴的标签为空字符串。
  6. scale_y_continuous(expand = expansion(mult = c(0.1, 0.1)))
    • 设置 y 轴为连续比例尺,并添加一些扩展空间,mult 参数设置为 0.1,意味着在 y 轴的两端各增加 10% 的空间。
  7. geom_point(data = plotOcc, aes(x = Group, y = position, size = occ), show.legend = FALSE, shape = 1, stroke = 1)
    • 根据 plotOcc 数据框添加点,这些点表示出现率,映射 Group 到 x 轴,position 到 y 轴,occ 到点的大小,不显示图例,点的形状设置为 1(圆形),并且有 1 的描边。
  8. geom_text(data = plotOcc, aes(x = Group, y = position, label = occ_lab), show.legend = FALSE)
    • plotOcc 数据框的基础上添加文本标签,映射 Group 到 x 轴,position 到 y 轴,occ_lab 作为标签文本,不显示图例。
  9. scale_size_continuous(range = c(10, 12))
    • 设置点的大小比例尺,范围从 10 到 12。
  10. coord_flip()
    • 翻转坐标轴,使得 x 轴变为垂直,y 轴变为水平。
  11. guides(color = "none")
    • 设置颜色图例为不显示。
  12. theme_classic()
    • 应用经典的 ggplot2 主题。
  13. theme(axis.title = element_text(size = 12, color = "black", face = "bold"), axis.text = element_text(size = 10, color = "black"), text = element_text(size = 9, color = "black"))
    • 自定义图表的主题元素,设置轴标题和文本的大小、颜色和字体加粗。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

pl

结果:带有显示Index在不同分组出现率的箱线图

画图: prism主题

结果:带有显示Index在不同分组出现率的prism风格的箱线图

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
R可视化:ggpubr的基本图形
GGPlot2(通常缩写为ggplot2)是一个在R语言中广泛使用的绘图包,以其灵活和强大的数据可视化功能而闻名。它基于"The Grammar of Graphics"一书的概念,允许用户通过组合不同的视觉元素来创建自定义的图形。而ggpubr是ggplot2的一个扩展包,它进一步简化了图形的创建过程,特别是对于初学者来说,提供了一种更为直观和易于理解的绘图方式。
生信学习者
2024/06/11
2770
R可视化:ggpubr的基本图形
gghalves包-你五毛我五毛
gghalves可以通过ggplot2轻松地编写自己想要的一半一半(half-half plots)的图片。比如:在散点旁边显示箱线图、在小提琴图旁边显示点图。
庄闪闪
2021/04/09
1.2K0
全网最全的R语言基础图形合集
直方图是一种对数据分布情况进行可视化的图形,它是二维统计图表,对应两个坐标分别是统计样本以及该样本对应的某个属性如频率等度量。
生信学习者
2024/06/12
1190
全网最全的R语言基础图形合集
「R」数据可视化2 : 箱形图
在生物领域我们常常使用R语言对数据可视化。在对数据可视化的时候,我们需要明确想要展示的信息,从而选择最为合适的图突出该信息。本系列文章将介绍多种基于不同R包的作图方法,希望能够帮助到各位读者。
王诗翔呀
2020/07/06
2.3K0
「R」数据可视化2 : 箱形图
「R」ggplot2数据可视化
R有几种不同的系统用来产生图形,但ggplot2是最优雅而多变的那一种。ggplot2实现了图形语法,一种描述和构建图形的逻辑系统。通过ggplo2,我们能够快速学习,多处应用。
王诗翔呀
2020/07/03
8.4K0
60-R可视化-8-用ggsignif做统计分析绘图
参考:R绘图系列-带有significant信息的boxplot | showteeth's blog[1]GitHub - const-ae/ggsignif: Easily add significance brackets to your ggplots[2][ggplot2添加p值和显著性 - 简书 (jianshu.com)](https://www.jianshu.com/p/77f12664540b "ggplot2添加p值和显著性 - 简书 (jianshu.com "ggplot2添加p值和显著性 - 简书 (jianshu.com)")")
北野茶缸子
2021/12/17
2.7K0
60-R可视化-8-用ggsignif做统计分析绘图
56-R可视化-5-ggplot2基石三部曲之基础二
几何对象的本质,也就是画面上的不同图层。当我们通过 ggplot(data=example) 后,便相当于设定了默认的ggplot2 设定的背景图层,接着依靠 +geom_point() , +geom_bar() 等等,便可以实现图层的添加。
北野茶缸子
2021/12/17
2.1K0
56-R可视化-5-ggplot2基石三部曲之基础二
R语言ggplot画图(autocad命令输入方式有几种)
提到R语言,总会想到它强大的绘图包ggplot2,甚至于其他语言中也有它的痕迹(例如,python中的matplotlib模块就有ggplot样式)。以下,总结了一些日常绘图中常用的命令。
全栈程序员站长
2022/07/25
3.1K0
R语言ggplot画图(autocad命令输入方式有几种)
ggplot2|从0开始绘制箱线图
继续“一图胜千言”系列,箱线图通过绘制观测数据的五数总括,即最小值、下四分位数、中位数、上四分位数以及最大值,描述了变量值的分布情况。箱线图能够显示出离群点(outlier),通过箱线图能够很容易识别出数据中的异常值。
生信补给站
2020/08/06
2.4K0
R语言之可视化(32)之ggtext:提高ggplot2的文本呈现
该ggtext软件包为ggplot2 提供了富文本(基本HTML和Markdown)支持。 富文本可用于图注解(图标题,字幕,标题,轴标签,图例等)中并可视化文本数据,就像通常使用geom_text()。
用户1359560
2020/05/18
4.3K0
R语言之可视化(32)之ggtext:提高ggplot2的文本呈现
十一、画图(ggplot2、ggpubr)及图片保存
Q1 :能不能自行指定映射的具体颜色? 想要自行指定映射的颜色,就必须要有映射。
叮当猫DDM
2023/02/09
2.4K0
R绘图——ggplot2
ggplot2默认没有引号,第一行为全局设置,以下分别为分图层。全局设置后一定要由+,每个分图层可以单独设置映射aes
用户10803004
2023/10/31
3260
ggplot2学习笔记之图形排列
作者:严涛 浙江大学作物遗传育种在读研究生(生物信息学方向)伪码农,R语言爱好者,爱开源
生信宝典
2018/12/18
2.5K0
ggplot2学习笔记之图形排列
如何在ggplot2图形上添加显著性差异注释?
研究者常常要比较两组数据是否有统计学差异,并且要将这种差异在图形上通过线和注释标注出来。
百味科研芝士
2020/09/04
15.1K0
如何在ggplot2图形上添加显著性差异注释?
R语言ggplot2画图比较两组连续型数据的几种方案
分别是ggplot2 用来画图RColorBrewer 用来生成颜色dplyr 用来整理数据
用户7010445
2020/12/08
4.7K0
R语言ggplot2画图比较两组连续型数据的几种方案
ggplot2|详解八大基本绘图要素
ggplot2是由Hadley Wickham创建的一个十分强大的可视化R包。按照ggplot2的绘图理念,Plot(图)= data(数据集)+ Aesthetics(美学映射)+ Geometry(几何对象)。本文将从ggplot2的八大基本要素逐步介绍这个强大的R可视化包。
生信补给站
2020/08/05
7.4K0
ggplot2|详解八大基本绘图要素
R语言之可视化⑥R图形系统续目录
ggplot2包中的主要功能是ggplot(),它可用于使用数据和x / y变量初始化绘图系统。 例如,以下R代码将数据集初始化为ggplot,然后将一个图层(geom_point())添加到ggplot上,以创建x = Sepal.Length的散点图y = Sepal.Width:
用户1359560
2018/12/12
2.1K0
R语言ggplot2分组箱线图添加误差线的简单小例子
这样多了一个垂直线,不好看,我们把误差线的图层放到最下层,就是把代码写到boxplot的前面,然后加一些基本的美化
用户7010445
2021/10/13
5.5K0
[R语言]数据可视化的最佳解决方案:ggplot2
ggplot是一个拥有一套完备语法且容易上手的绘图系统,在Python和R中都能引入并使用,在数据分析可视化领域拥有极为广泛的应用。本篇从R的角度介绍如何使用ggplot2包,首先给几个我觉得最值得推荐的理由:
TOMOCAT
2020/06/10
2.9K0
半图绘制,加倍美观!
许多数据的可视化形式都是对称的,例如箱型图、散点图、小提琴图等。由于显示信息的空间有限,可以通过将几何图形切成两半并添加其他几何图形来更好地利用空间。
作图丫
2022/03/29
8950
半图绘制,加倍美观!
相关推荐
R可视化:ggpubr的基本图形
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验