如何用R语言一键生成带散点的ggplot2箱线图?这4个函数你必须掌握

第一章:R语言中ggplot2箱线图与散点图融合的重要性

在数据可视化领域,单一图表往往难以全面揭示数据的分布特征。将箱线图与散点图融合,能够同时展现数据的集中趋势、离群值以及原始观测点的分布情况,极大提升分析深度。`ggplot2` 作为 R 语言中最强大的绘图包之一,提供了灵活的图层机制,使得组合多种几何对象变得直观高效。

增强数据洞察力

箱线图概括了数据的四分位数和异常值,但可能掩盖样本量或数据点密集程度。叠加散点图后,可以观察到原始数据的聚集模式,避免“图形误导”。

实现方法示例

使用 `geom_boxplot()` 和 `geom_jitter()` 可轻松实现融合图。抖动(jitter)处理能有效避免散点重叠:

# 加载必要库
library(ggplot2)

# 使用内置数据集iris绘制融合图
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  geom_boxplot(outlier.color = NA, alpha = 0.7) +  # 绘制箱线图,隐藏默认异常点
  geom_jitter(width = 0.2, color = "blue", alpha = 0.6) +  # 添加抖动散点
  labs(title = "箱线图与抖动散点图融合",
       x = "物种", y = "萼片长度")
上述代码中,`alpha` 控制透明度以减少遮挡,`width` 参数调整抖动范围,确保点分布在箱体两侧而不重叠。

适用场景对比

  • 科研论文:需同时展示统计摘要与原始数据
  • 质量控制:识别异常值的同时保留测量记录轨迹
  • 教学演示:帮助学生理解箱线图各部分的实际数据基础
图表类型优势局限
仅箱线图突出五数概括与异常值隐藏样本分布细节
仅散点图显示全部原始数据高密度下难以比较组间差异
融合图兼具统计摘要与数据真实感需合理调整视觉参数避免混乱

第二章:基础绘图函数详解与应用

2.1 使用ggplot()初始化图形环境与数据映射

在`ggplot2`中,`ggplot()`函数是构建可视化图形的起点,用于初始化绘图环境并定义数据源和美学映射。
核心参数解析
  • data:指定绘图所用的数据框,如mtcars;
  • mapping:通过aes()函数定义变量到图形属性(如x、y、颜色、形状)的映射。
ggplot(data = mtcars, mapping = aes(x = wt, y = mpg))
该代码初始化了一个图形对象,将车辆重量(wt)映射到x轴,每加仑英里数(mpg)映射到y轴。此时尚未绘制任何图形元素,仅完成数据与坐标的绑定,为后续添加几何图层(如点、线)奠定基础。

2.2 geom_boxplot()绘制标准箱线图的参数优化

在使用ggplot2绘制箱线图时,geom_boxplot()提供了多个参数以精细控制图形表现。通过调整关键参数,可显著提升数据可视化效果。
常用参数详解
  • outlier.color:自定义异常值颜色
  • varwidth:设置为TRUE可使箱体宽度反映样本量
  • notch:启用凹槽显示中位数置信区间
代码示例与说明

ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_boxplot(
    outlier.color = "red", 
    varwidth = TRUE, 
    notch = TRUE,
    fill = "lightblue"
  )
该代码中,varwidth体现不同气缸数的车辆数量差异,notch = TRUE添加中位数比较凹槽,红色异常点增强离群值识别,整体提升统计信息传达效率。

2.3 geom_jitter()添加随机扰动散点提升可读性

在绘制分类散点图时,数据点常因数值重复而重叠,严重影响可视化可读性。`geom_jitter()` 通过在原始数据位置上添加轻微的随机扰动,有效分离重叠点。
基本用法示例
ggplot(mtcars, aes(x = factor(cyl), y = mpg)) +
  geom_jitter(width = 0.2, height = 0)
上述代码中,`width = 0.2` 表示在 x 轴方向施加最大为 0.2 单位的随机偏移,避免点过于分散;`height = 0` 表示 y 轴不扰动,保持原始值。
关键参数说明
  • width:控制水平方向扰动幅度,适合分类变量在 x 轴时使用
  • height:控制垂直方向扰动,通常设为 0 以保留数值精度
  • 结合 alpha 参数可进一步优化密集区域的透明度叠加效果

2.4 geom_point()精准叠加原始数据散点

在数据可视化中,叠加原始数据散点能有效揭示分布细节与潜在模式。`geom_point()` 作为 ggplot2 中的核心图层函数,可将原始观测值以点的形式精确投射到图形中。
基础用法与参数解析

ggplot(mtcars, aes(wt, mpg)) +
  geom_point()
该代码绘制车辆重量(wt)与每加仑英里数(mpg)的散点图。`aes()` 定义坐标映射,`geom_point()` 添加散点图层,默认使用黑色圆形点。
增强视觉表达
通过调整颜色、大小和透明度,可提升信息密度:
  • color:区分分组变量,如 aes(color = factor(cyl))
  • size:控制点的半径,适用于突出关键观测
  • alpha:设置透明度,缓解重叠问题,例如 alpha = 0.6

2.5 coord_cartesian()调整坐标范围避免图形裁剪

在ggplot2中,`coord_cartesian()`用于调整坐标轴的显示范围,且不会对数据进行裁剪。与`xlim()`或`ylim()`直接过滤数据不同,该函数仅缩放视图,保留所有数据点用于绘图计算。
核心功能对比
  • xlim/ylim:从数据源中删除超出范围的点
  • coord_cartesian():仅改变可视化窗口,数据完整性保持不变
使用示例
ggplot(mtcars, aes(wt, mpg)) +
  geom_point() +
  coord_cartesian(xlim = c(2, 4), ylim = c(15, 25))
上述代码将x轴限制在2到4之间,y轴在15到25之间。即使原始数据超出此范围,所有点仍参与平滑线或统计计算,仅视觉上被“框选”显示,有效避免因数据截断导致的图形失真。

第三章:数据预处理与可视化协同策略

3.1 数据清洗与异常值识别在绘图前的关键步骤

数据可视化前的数据质量直接影响图表的准确性与可读性。数据清洗是确保数据一致性和完整性的首要步骤。
常见清洗操作
  • 处理缺失值:填充或删除空值
  • 去除重复记录
  • 统一数据格式(如日期、单位)
异常值识别方法
使用箱线图规则(IQR)检测异常值:
Q1 = df['value'].quantile(0.25)
Q3 = df['value'].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR
outliers = df[(df['value'] < lower_bound) | (df['value'] > upper_bound)]
该代码通过四分位距识别超出正常范围的数据点,lower_bound 和 upper_bound 定义了合理区间,有助于在绘图前过滤干扰项。
清洗前后对比
指标清洗前清洗后
数据量1000950
缺失值5%0%
异常值3%0.5%

3.2 分组变量的因子化处理与图例一致性控制

在数据可视化中,分组变量常以分类形式存在。若未进行因子化处理,可能导致图例顺序混乱或显示异常类别。
因子化处理的必要性
将字符型或数值型分组变量转换为因子类型,可显式定义类别顺序和标签,确保图形输出的一致性。

# 将分组变量转换为有序因子
data$group <- factor(data$group, 
                    levels = c("Low", "Medium", "High"),
                    ordered = TRUE)
该代码将 group 列转换为有序因子,指定类别顺序为 Low → Medium → High,避免默认字母排序干扰图例布局。
图例一致性控制策略
统一因子水平和标签命名,可在多图对比中保持图例颜色映射一致。使用 ggplot2 时,配合 scale_fill_manual() 固定颜色分配。
  • 提前定义公共因子水平
  • 跨数据集保持标签一致性
  • 结合调色板固定视觉映射

3.3 长格式数据重塑:reshape2::melt()在ggplot2中的适配

宽格式到长格式的转换需求
在使用 ggplot2 绘图时,数据常需为“长格式”(long format)。当原始数据为宽格式(如多列表示不同时间点)时,reshape2::melt() 可高效实现重塑。
library(reshape2)
data_wide <- data.frame(id = 1:3, time1 = c(4,5,6), time2 = c(7,8,9))
data_long <- melt(data_wide, id.vars = "id", 
                  variable.name = "time", value.name = "value")
上述代码中,id.vars 指定不变的标识变量,variable.name 和 value.name 分别定义新生成的变量与值列名。
与ggplot2的无缝集成
长格式数据便于使用 aes(x = time, y = value, group = id) 实现分组绘图,提升可视化表达力。

第四章:高级定制化技巧与实战案例

4.1 自定义颜色主题与调色板增强视觉表现力

在现代前端开发中,统一且富有表现力的色彩系统是提升用户体验的关键。通过定义自定义颜色主题,开发者能够确保品牌色调在整个应用中一致呈现。
设计系统中的调色板构建
一个完整的调色板通常包含基础色、辅助色、警示色及中性色。使用 CSS 自定义属性可实现灵活的主题切换:
:root {
  --primary: #4285f4;
  --primary-light: #e8f0fe;
  --primary-dark: #1a73e8;
  --error: #ea4335;
  --surface: #ffffff;
  --text-primary: rgba(0, 0, 0, 0.87);
}
上述代码定义了全局颜色变量,便于在组件间复用并支持动态主题切换。通过 JavaScript 动态切换类名或修改 CSS 变量,即可实现深色/浅色模式。
语义化颜色命名与可维护性
  • 避免使用具体颜色值命名(如 "red")
  • 采用功能导向命名(如 "error"、"success")
  • 提升可访问性对比度,满足 WCAG 标准

4.2 添加均值点与显著性标记提升统计解释性

在数据可视化中,添加均值点和显著性标记能有效增强图表的统计解释力,帮助读者快速识别组间差异。
均值点的可视化实现
使用 Matplotlib 结合 Seaborn 可轻松在箱线图或小提琴图上叠加均值点:
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 示例数据
data = sns.load_dataset("tips")
sns.violinplot(x="day", y="total_bill", data=data, inner=None)
sns.stripplot(x="day", y="total_bill", data=data, color="black", alpha=0.6)
sns.pointplot(x="day", y="total_bill", data=data, estimator=np.mean, 
              color="red", scale=0.5, ci=None)  # 添加均值点
plt.show()
上述代码中,sns.pointplot 使用 estimator=np.mean 显示每组均值,红色点直观标出中心趋势。
显著性标记的添加
通过 statannotations 库可自动标注显著性:
  • 安装依赖:pip install statannotations
  • 支持 t-test、Mann-Whitney U 等检验方法
  • 自定义注释位置与文本样式

4.3 利用facet_wrap实现多面板分面可视化

在ggplot2中,facet_wrap()函数用于将数据按某一分类变量拆分为多个子集,并在独立的面板中绘制相同结构的图表,便于跨组比较。
基本语法结构

ggplot(data, aes(x, y)) + 
  geom_point() + 
  facet_wrap(~ category, ncol = 2)
其中~ category指定分面变量,ncol控制面板列数,也可使用nrow设定行数。
常用参数说明
  • scales = "free":允许各面板坐标轴尺度独立
  • labeller:自定义面板标签显示方式
  • dir = "v":设置面板排列方向为垂直(默认水平)
通过合理配置参数,可有效提升多组数据的可视化对比效率与可读性。

4.4 输出高分辨率图像用于论文与报告发布

在学术出版与技术报告中,图像的清晰度直接影响信息传达的准确性。为确保图表在打印或高DPI屏幕上保持锐利,需导出为高分辨率格式。
推荐输出参数设置
  • 分辨率:至少300 DPI,适用于印刷出版
  • 格式:优先选择PDF、PNG或TIFF
  • 尺寸:根据目标期刊或文档模板设定物理尺寸
使用Matplotlib生成高分辨率图像
import matplotlib.pyplot as plt

plt.figure(figsize=(8, 6), dpi=300)  # 设置画布大小与分辨率
plt.plot([1, 2, 3], [4, 5, 6])
plt.savefig("output.pdf", format="pdf", bbox_inches="tight", dpi=300)
上述代码创建分辨率为300 DPI的图像,并以PDF矢量格式保存,确保在论文中缩放不失真。bbox_inches="tight" 可裁剪多余边距,dpi 参数控制像素密度,是保证输出质量的关键。

第五章:总结与进阶学习路径建议

构建完整的知识体系
现代软件开发要求开发者不仅掌握单一技术栈,还需理解系统间的协作机制。例如,在微服务架构中,Go 语言常用于高性能服务实现:

// 示例:使用 Gin 框架构建 REST API
package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/api/v1/health", func(c *gin.Context) {
        c.JSON(200, gin.H{"status": "ok"})
    })
    r.Run(":8080")
}
推荐的学习路线图
  • 深入理解操作系统原理,特别是进程调度与内存管理
  • 掌握容器化技术,如 Docker 和 Kubernetes 编排实践
  • 学习分布式系统设计模式,包括熔断、限流与最终一致性方案
  • 实践 CI/CD 流水线搭建,结合 GitHub Actions 或 ArgoCD 实现自动化部署
实战项目驱动成长
项目类型核心技术栈目标能力提升
博客平台Go + PostgreSQL + Redis全栈开发与数据缓存策略
监控系统Prometheus + Grafana + Exporter指标采集与可视化分析
参与开源社区贡献
通过为 CNCF(Cloud Native Computing Foundation)项目提交 PR,例如 Istio 或 Envoy,可深入理解服务网格的数据平面与控制平面交互机制。实际案例中,修复一个 TLS 配置传播 bug 可显著提升对 xDS 协议的理解。
R语言绘图之ggplot2包 今天来迅速的学习下ggplot2包的简单绘图。 主要介绍了ggplot2中的基本元素:数据与映射,几何对象,统计变换,标度,坐标系,分面,还有直方图,柱形图等的使用方法。 阅读详情

相关推荐

R语言ggplot2教程 十张图带你入门ggplot2

ggplot2入门教程,散点图、折线图、直方图柱状图

weixin_55798278的博客 1万+

【R语言数据可视化终极指南】:ggplot2箱线图叠加散点图的5种高效实现方法

掌握R语言ggplot2箱线图添加散点的5种高效方法,解决数据分布与个体值可视化难题。适用于科研绘图、统计分析等场景,结合geom_boxplot与geom_jitter等函数,提升图表信息量,值得收藏。

CodeNexus的博客 724

ggplot2箱线图的美化之路: 箱线图到直方图加散点图再加误差线的美化之路

如何把你的箱线图变成plus版? 箱线图到直方图加散点图再加误差线的美化之路前言数据准备箱线图美化01 一个平平无奇的箱线图02 给箱线图加上误差线03 加上散点的信息04 去除网格线和背景,更改颜色05 箱线图变带误差线、散点的柱形图参考资料 前言 由于自己科研工作的需要,经常需要画一些箱线图,比较2个样本的基因表达量啊什么的,这个时候,就会想说如何实现箱线图的美化,以及最近看到一个把正常基因表达量的箱线图画成了直方图加散点图再加误差线的形式,因此想趁空闲来写下我的ggplot2的箱线图的美化之路。

暴躁的搬砖工… 1万+

数据可视化——R语言ggplot2包绘制箱线图叠加散点图

数据可视化——R语言ggplot2包绘制箱线图叠加散点图 概述: 当每个组的数据点相对较少时,又需要显示出各组数据的分布情况时,可以采用箱线图叠加散点图的方式来表达数据。 使用工具:R语言中的ggplot2工具包 箱线图叠加散点图是数据表达中常用的一种方式。ggplot2包支持图形叠加,可以很好的实现我们想要的效果。 由于使用ggpolt2包绘制的箱线图的胡须末端没有短横线,可以采用误差条图来绘制...

zhouhucheng00的博客 5万+

数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合)

数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合) 概述:R语言使用ggplot2工具包绘制小提琴图,为了使数据表达更加丰富,同时将小提琴图与箱线图和误差条图相结合。另外,当每个组别有两个属性变量时,分半的小提琴图可节省绘图空间,同时更美观。为了突出小提琴图表达数据的优越性,常规的条形图结合误差条图也被绘制。 小提琴图(Violin Plot)用于显示数据分布及其概率...

zhouhucheng00的博客 8万+

[置顶]R语言 ggplot2包

R语言  ggplot2包的学习   分析数据要做的第一件事情,就是观察它。对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将绘图与数据分离,数据相关的绘图与数据无关的绘图分离ggplot2是按图层作图ggplot2保有命令式作图的调整函数,使其更具灵活性ggplot2将常见的统计变换融入到了绘图中。ggplot的绘图有

8770

R语言如何绘制箱线图(5)

R语言如何绘制箱线图(5) 1.什么是箱线图? 箱线图又称盒图,是在1977年由美国的统计学家约翰·图基(John Tukey)发明的。它由五个数值点组成:最小值(min),下四分位数(Q1),中位数(median),上四分位数(Q3),最大值(max)。下四分位数、中位数、上四分位数组成一个“带有隔间的盒子”。上四分位数到最大值之间建立一条延伸线,这个延伸线成为“胡须(whisker)”。由于现实数据中总是存在各式各样地“脏数据”,也称为“离群点”,于是为了不因这些少数的离群数据导致整体特征的偏移,将这些

qq_35294674的博客 1万+

【手把手陪你学R】用ggplot2包画箱线图

箱线图是什么? 箱线图(boxplot),又称箱形图或盒式图,不仅可以展示不同类别数据的平均水平差异,还能展示数据间的极值、离散程度、异常值等信息 箱子的中间线,是数据的中位数,反映了数据的平均水平 箱子的上下限,分别是数据的上四分位数和下四分位数,箱子包含了50%的数据,其高度在一定程度上反映了数据的离散程度 箱子的上方和下方又各有一条线,分别是数据的最大和最小值,而外溢的点则可理解成为异常值 第一步 安装并载入ggplot2包 install.packages("ggplot2") #安装

Yif18的博客 2万+

ggplot2-绘图-箱线图

目录前面的啰嗦绘图数据说明基本箱线图分组箱线图美化分组箱线图箱线图完整版代码基本箱线图的完整代码分组箱线图的完整代码 前面的啰嗦 本教程对绘图所需数据和绘图过程进行了一步步的解释,稍显啰嗦,没时间细看或不想一步步看的朋友可以直接点击目录最后一节: 箱线图完整版代码 绘图数据说明 用到的数据是mpg数据集,这是ggplot2包自带的数据集,可以使用以下代码查看该数据集的基本情况: library(ggplot2) ?mpg # 或者help(mpg) 从帮助文档中可以看出这是一个234x11的数据框,它记录

水木的编程生涯 1万+

【R语言-ggplot2入门学习教程-全面概览】

ggplot2 初步学习 前言 在R in action 第2版中有对这个绘图包的简单介绍,但感觉确实只是简单介绍,在此作为一个初步的学习吧!冲冲冲,先有个简单的了解,之后再深入细节,参考官方文档、书籍、以及其它人的经验等,画出更好看的图。

^_^ 1万+

用R中ggplot2包做箱线图、折线图、条形图

用R中ggplot2包做箱线图、折线图、条形图使用ggplot2完成画图工作箱线图折线图条形图 使用ggplot2完成画图工作 下载R软件和RStudio,为了书写方便在RStudio(类似于Matlab)中写代码。 下载ggplot2包:install.packages(“tidyverse”) 加载ggplot2包:library(ggplot2) 箱线图 代码: data<- rea...

qq_37316375的博客 7207

r语言ggplot2 多线图绘制图例_R语言绘制箱线图示例

R语言绘制箱线图箱线图(又称盒须图)是常见的统计图形之一,通过绘制连续型变量的五数总括,即最小值、下四分位数(第25百分位数)、中位数(第50百分位数)、上四分位数(第75百分位数)以及最大值,描述了连续型变量的分布。箱线图能够显示出可能为离群点(范围±1.5×IQR以外的值,IQR表示四分位距,即上四分位数与下四分位数的差值)的观测。默认情况下,两条须的延伸极限不会超过盒型各端加1.5...

weixin_39709367的博客 8260

R语言绘制箱线图并添加相关显著性

使用R语言进行数据差异分析,同时绘制箱线图并添加相关显著性。

m0_61206827的博客 7880

如何用R语言ggplot2画箱线图

ggplot2绘制箱线图

BingJH2018212666的博客 1897

ggplot2箱式图两两比较_R语言ggplot2箱线图绘图总结

主要从如何看图、用图与作图三个方面来对箱线图进行理解和总结。1、看图箱线图概述图1箱线图概述图2如图所示,箱线图是将一组数据按照大小顺序排列后进行绘制的,包含6个数据节点,分别表示出数据的上边缘、上四分位数点Q3(数据从小到大排列后处在75%位置上的数据)、中位数、下四分位数Q1(数据从小到大排列后处在25%位置上的数据)、下边缘和异常值。由此,箱线图很形象地分为中心、延伸以及分布状态的全部范围。...

weixin_39643244的博客 4765

R语言——ggplot2的绘图逻辑

文章目录前言数据集介绍polt与ggplot对比ggplot2绘图绘制画布几何对象统计变换标尺设置坐标系的转换分面facet_grid函数facet_wrap函数保存图形写到最后 前言 在R语言里,谈及绘图,ggplot2是最出名的绘图包之一,作为一个绘图神器,它提供了许许多多的功能给用户使用,仅用短短几行代码,一幅幅高端大气的图像便跃然纸上,这可能就是ggplot2包的魅力所在。 我刚开始学习ggplot2的时候只用于学术上的制图,对深层的制图一知半解,趁着有空便重新学习了一下ggplot2包,才发现其背

abcbbbd的博客 5284

R语言中使用ggplot2绘制散点图箱线图,附加显著性检验

这段代码的作用是创建一个箱形图,显示不同物种(Species)的萼片宽度(Sepal.Width)分布,且不同物种的箱形用不同颜色表示,并且这些颜色半透明。对于两组以上的独立样品,如果数据同时满足正态性和方差齐性,可以采用方差分析(ANOVA)或者Kruskal检验,如果不满足可采用Kruskal检验。本篇笔记主要内容:介绍R语言中绘制箱线图和散点图的方法,以及二者结合展示教程,添加差异比较显著性分析,绘制如上结果图。这张图x轴是不同分类,每个分类下有A和B两组,y轴表示具体的值,每个分类上有P值标注。

青笋的博客 1万+

科研绘图二:箱线图(抖动散点)

当每个组的数据点相对较少时,又需要显示出各组数据的分布情况时,可以采用箱线图叠加散点图的方式来表达数据。

chj65的博客 4309
上一篇: 【R Shiny交互优化秘籍】:利用modalDialog实现动态弹窗的7种场景
下一篇: 为什么你的conditionalPanel不生效?5分钟定位并修复常见语法陷阱
SimCompile
博客等级 码龄1年 140粉丝 2012原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值