R语言绘图神器| ggplot2与其基本用法介绍

ggplot2

ggplot2 是R语言中的可视化神包 ,由Hadley Wickham开发。其本质是一套基于"图层化、模块化"的绘图语法体系。它彻底改变了传统R 绘图(如grid)的 "命令式" 逻辑,通过将数据、图形元素、美学映射拆解为独立组件,让用户能像"搭积木"一样灵活构建复杂可视化,同时保证代码的可读性和可复现性。目前,ggplot2已成为数据科学、学术研究、商业分析中最主流的绘图工具之一,尤其擅长生成发表级别 的高质量图表。我们给大家演示过的CellChatSeuratmonocle等包的可视化内核其实均是ggplot2。

视频教程

大家可以先做一做R语言基础小测验,看看自己是否需要跟我们5.5h入门R语言的课程。

先上教程视频,B站同步播出:

https://www.bilibili.com/video/BV1miNVeWEkw

完整视频回放和答疑服务可见:5.5h入门R语言

"R语言入门课"是我们认为生信小白入门 不得不听的一个课程,我们也为这个课程准备了许多干货。R语言的精髓便是数据处理,在本节课中,我们详细介绍了向量、矩阵、数据框、数组、因子、列表的创建方法与数据访问方式,为以后的生物信息学数据处理打下牢固的基础

本次课程代码

大家可以跟着视频练习如下代码:

复制代码
#### 4 图形初级(ggplot2) ####
## 写在前面
# ggplot2 是 R 语言中一款功能强大且广受欢迎的数据可视化包,
# 由 Hadley Wickham 基于 Grammar of Graphics(图形语法) 开发,
# 其核心思想是将数据可视化拆解为多个独立且可组合的组件,
# 让用户能灵活、高效地创建专业级图表,广泛应用于数据分析、学术研究、商业报告等场景。
# 核心设计理念:图形语法
# ggplot2 的精髓在于 "图形语法",它将一张图表抽象为以下几个核心组件,用户可通过组合这些组件构建任意类型的可视化:
# 
# 数据(Data):可视化的基础,需传入结构化数据(如 data.frame 格式),所有图形元素都围绕数据展开。
# 映射(Aesthetics, 简称 aes):定义数据列与图形视觉属性的关联,例如将 "销售额" 映射到 y 轴、"地区" 映射到颜色(color)、"产品类别" 映射到形状(shape)等。
# 几何对象(Geometric Objects, 简称 geom):图表的核心视觉元素,决定了图表的类型,如点(geom_point,散点图)、线(geom_line,折线图)、柱状(geom_bar,柱状图)、箱线(geom_boxplot,箱线图)等。
# 标度(Scales):控制视觉属性的 "尺度",例如调整坐标轴的范围(scale_x_continuous)、颜色的配色方案(scale_color_brewer)、图例的显示方式等,确保视觉映射的合理性和美观性。
# 坐标系(Coordinate Systems):定义图表的坐标体系,默认是笛卡尔坐标系(coord_cartesian),还支持极坐标(coord_polar,用于饼图、雷达图)、翻转坐标(coord_flip,用于横向柱状图)等。
# 分面(Facets):按数据的某个类别将图表拆分为多个子图(类似 "小 multiples"),例如按 "年份" 分面展示不同年份的地区销售额,常用函数为 facet_wrap 或 facet_grid。
# 主题(Themes):控制图表的非数据相关外观,如背景颜色、坐标轴标签字体、图例位置等,ggplot2 提供默认主题(theme_grey),也支持自定义主题(如 theme_minimal、theme_bw,或通过 theme() 函数精细调整)。
#1.  本章学习使用**mosaicData**包中的**CPS85**数据框
#2.  探讨ggplot2的部分用法
##### 4.1 使用ggplot2包创建图形 #####
# 测试数据包
if(!require(mosaicData))install.packages('mosaicData')
# ggplot2本体:
if(!require(ggplot2))install.packages('ggplot2')
?ggplot()
# ggplot测试数据,长格式数据:
head(CPS85)
# 宽格式数据不利于ggplot输入:
expr <- matrix(1:100,ncol = 10,nrow = 10)
colnames(expr) <- paste('cell_',1:10)
rownames(expr) <- paste('gene_',1:10)
expr
###### 4.1.1 函数ggplot2() ######
#需要2个参数
#1)设置数据框,这里为data=CPS85
#2)一组映射,是数据框中的变量到图形中的可视属性的映射,放置在函数aes()中,aes()函数表示美化或你能看见的东西
head(CPS85)
ggplot(data=CPS85,mapping = aes(x=exper,y=wage))
#这里的图是空白的,是因为我们还未指定要放置什么在图上,
# 仅指定来exper(工作年限)映射到x轴,wage(工资)映射到y
###### 4.1.2 geom()函数 ######
# (1) 函数选项
# 该函数是规定在图形上放置什么样的几何对象(点、线、条、阴影区域),常用选项为:
# 
# +------------------+---------------+-----------------------------------------+
# | 函数             | 添加的图形    | 选项                                    |
# +:=================+:==============+:========================================+
# | geom_bar()       | 条形图        | color,fill,alpha                        |
# +------------------+---------------+-----------------------------------------+
# | geom_boxplot()   | 箱线图        | color,fill,alpha,notch,width            |
# +------------------+---------------+-----------------------------------------+
# | geom_density()   | 核密度图      | color,fill,alpha,linetype               |
# +------------------+---------------+-----------------------------------------+
# | geom_histogram() | 直方图        | color,fill,alpha,linetype,binwidth      |
# +------------------+---------------+-----------------------------------------+
# | geom_hline()     | 水平线条      | color,alpha,linetype,size              |
# +------------------+---------------+-----------------------------------------+
# | geom_jitter()    | 抖动点        | color,size,alpha,shape                  |
# +------------------+---------------+-----------------------------------------+
# | geom_line()      | 线图          | colorvalpha,linetype,size               |
# +------------------+---------------+-----------------------------------------+
# | geom_piont()     | 散点图        | color,alpha,shape,size                  |
# +------------------+---------------+-----------------------------------------+
# | geom_rug()       | 地毯图        | color,side                              |
# +------------------+---------------+-----------------------------------------+
# | geom_smooth()    | 拟合曲线      | method,formula,color,fill,linetype,size |
# +------------------+---------------+-----------------------------------------+
# | geom_text()      | 文本注解      | 选项很多,详见帮助信息                  |
# +------------------+---------------+-----------------------------------------+
# | geom_violin()  | 小提琴图      | color,fill,alpha,lintype               |
# +------------------+---------------+-----------------------------------------+
# | geom_vline()     | 垂线          | color,alpha,linetype,size              |
# +------------------+---------------+-----------------------------------------+
# 
# **注解** 
# 
# color表示颜色,可以用名称或十六进制代码指定,几何图形外框颜色
# 
# alpha表示透明度,0(完全透明)-1(完全不透明)
# 
# fill表示几何图形填充颜色
# (2) 举例
#对刚刚的数据(工作年限和工资)做散点图,用geom_piont()
library(ggplot2)
library(mosaicData)
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
geom_point()
#图片中显示出一个异常值,可以对其删除后再做图:
library(ggplot2)
library(mosaicData)
CPS85 <- CPS85[CPS85$wage<40,]
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point()
#利用geom_smooth()函数在图片中添加一条趋势线
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point()
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point(color="blue",alpha=0.5,size=1.5)
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point(color="red",alpha=0.5,size=1.5)
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point(color="red",alpha=0.1,size=1.5)
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point(color="red",alpha=0.1,size=5)
ggplot(data = CPS85,mapping = aes(x=exper,y=wage))+
  geom_point(color="blue",alpha=0.5,size=1.5)+
  geom_smooth(method = "lm")+
  theme_bw()

R语言入门课

1、课程简介

生信基地希望能够给大家提供系统性形成性规范性 的生信教学。前面几次活动中同学们表示希望能够有线下集中学习以及针对性的指导、答疑 。所以,此次我们已推出"生信R语言入门课 ",分为"R介绍"、"R语言数据对象"、"基本数据管理"、"图形初级(ggplot2)"四个模块共12节课 。当然,我们也不做生信快餐 ,本次活动回放已剪辑完毕,方便错过活动的小伙伴加入。后续我们会持续拉群 在群里进行课程内容的答疑。

2、R语言介绍

R语言是一种专门为统计分析、数据可视化和计算而设计的编程语言,广泛应用于各个领域。R语言支持各种统计分析方法,如线性回归、方差分析、聚类分析等,同时也能够进行复杂的图形和数据可视化。R语言凭借其开源、免费、工具包丰富、数据处理能力强、可视化丰富的特性在生物信息学中被广泛应用 。例如RNA-Seq差异分析常用的DESeq2、edgeR的引用次数多达数万次。我们制作的单细胞教程几乎也全是基于R语言环境。很多同学找我们学习单细胞的时候都表示不想学习R语言,直接学习单细胞分析,不积跬步无以至千里,这显然是不现实的,所以,欢迎大家来参加此次的课程。

资料&课表

目前12节 总计5.5h的视频课程回放已剪辑完毕,方便错过直播的同学随时加入学习:

除了学习视频外,还给大家准备了学习资料,包括学习手册、课后习题。大家人手一份资料可以跟着视频联系:

课程目录:

1 、R介绍

1.1 R 下载与安装

1.1.1 RStudio

1.1.2 R的帮助函数

1.1.3 用于管理R工作区的函数

1.2 包(Packages)

1.2.1 包的基本函数

1.2.2 包处理大型数据集的示例展示

2、 R语言数据对象

2.1 理解数据集

2.2 数据结构

2.2.1 向量(vector)

2.2.2 矩阵(matrix)

2.2.3 数组(array)

2.2.4 数据框(data)

2.2.5 因子(factor)

2.2.6 列表(list)

2.3 数据输入

2.3.1 从带分隔符的文本文件导入数据

2.3.2 导入Excel数据

3、基本数据管理

3.1 创建新变量

3.2 变量的重编码(recoding)

3.3 变量的重命名

3.4.缺失值(NA)

3.5 类型判断和转换

3.6 数据排序

3.7 数据集的合并

3.8 选取变量

3.9 选取观测值

3.10 subset()函数选择观测值或变量

3.11 剔除变量

3.12 dplyr包

3.13 使用管道操作符对语句进行串接

4、图形初级(ggplot2)

4.1 使用ggplot2包创建图形

4.1.1 函数ggplot2()

4.1.2 geom()函数

4.1.3 分组

4.1.4 标尺

4.1.5 刻面

4.1.6 标签

4.1.7主题

4.2 ggplot2包的详细信息

4.2.1 放置数据和映射选项

4.2.2 将图形作为对象使用

4.2.3 保存图形

相关推荐
Eiceblue3 小时前
Python OCR 技术实践:从图片中提取文本和坐标
开发语言·python·ocr·visual studio code
周杰伦fans3 小时前
C++ 中的 `::` 全局作用域符
开发语言·c++
ss2733 小时前
手写MyBatis第102弹:MapperBuilder与MapperAnnotationBuilder的双重解析机制深度剖析
java·开发语言·mybatis
fsnine4 小时前
python——人脸关键点检测
开发语言·python
235165 小时前
【并发编程】详解volatile
java·开发语言·jvm·分布式·后端·并发编程·原理
Algebraaaaa5 小时前
Qt中的字符串宏 | 编译期检查和运行期检查 | Qt信号与槽connect写法
开发语言·c++·qt
Red Car5 小时前
javascript 性能优化实例一则
开发语言·javascript·ecmascript
友友马5 小时前
『 QT 』Hello World控件实现指南
开发语言·qt
一只学java的小汉堡6 小时前
Java 面试高频题:HashMap 与 ConcurrentHashMap 深度解析(含 JDK1.8 优化与线程安全原理)
java·开发语言·面试