title: “Biotrainee Note5”
author: “yuluyang”
date: “2024-03-11”
生信技能树数据挖掘课程笔记~小洁老师授课
作图常用R包和函数
-
作图
-base
-ggplot2
-ggpubr
-
拼图
-mfrow
-grid.arrange
-cowplot
-patchwork
-
图片保存与导出
-经典三段论
-ggsave
-eoffice
——topptx
base
系统自带的基础绘图工具 了解即可
plot()
hist()
boxplot()
stripchart()
barplot()
dotplot()
piechart()
matplot()
lines()
curve()
abline()
points()
segments()
arrows()
axis()
...
了解ggplot2
R包
ggplot2
基本要素=数据与映射+几何对象+标尺+统计变换+坐标系统+图层+分面+主题
按图层作图的R包,图层包括三层——数据层data
、几何图形Geometry
和美学层Aesthetics
,不同层之间用+
连接起来,最终的图是由图层按顺序叠加展示
data
必须是以data.frame
格式
#标准代码示例
ggplot(data=iris)+ # 都是用'+'连接函数
geom_point(mapping = aes(x=Sepal.Length, # `ggplot2`里面列名是可以单打独斗存在的,不用带''
y=Petal.Length, # 把数据映射到x、y轴上
color=Species)) # 把物种`Species`映射到颜色上,同样是不用带''
# 映射`Mapping`:画图实际上是把数据中的变量映射到图形属性上
# `Aesthetics`记作`aes`也是映射,反映'x'、'y'、'color'、'size'、'shape'等
# 几何图形`Geometric Object`记作`Geom`,决定图形类型,如直方图、箱形图等
# 告诉`ggplot`,你想把前面的属性映射到散点或者折线上
# 不同的几何图形是可以叠加的,按代码顺序
# 不同的几何图形,要求的属性会有差别,当然这些属性也可以在几何图像映射时提供
## 统计变换`Statistics Transformation`记作`Stats`,数据的汇总形式,如直方图
## 坐标系统`Coordinate System`记作`coord`,作图所需的坐标轴与网格线
## 图层`Layer`(和几何对象是一个意思),将数据分解成子集,进行联合展示
## 分面`Facet`,对所需的绘图操作进行一层一层叠加,最终得到所需图形
ggplot2
的特殊语法:列名不带引号,行末写加号
ggplot2
入门级绘图模版
# ggplot(data = <data>)+
# <geom_function>(mapping=aes(<mappings>))
ggplot(data=iris)+ # `data=`属于形式参数可以省略
geom_point(mapping = aes(x=Sepal.Length, # `mapping=`属于形式参数可以省略
y=Petal.Length)) # `x=`、`y=`也属于形式参数可以省略
ggplot(iris)+
geom_point(aes(Sepal.Length,Petal.Length,color=Species)) # 这里`color`是`mapping=aes()`的参数,注意与后面作区分
ggplot(iris,aes(Sepal.Length,Petal.Length,color=Species))+
geom_point()
ggplot2
属性设置
- 轮廓颜色
color
可以使用字符串(颜色编码)或者’red’等 - 大小
size
单位是’mm’,代码里面只用写数据 - 形状
shape
不同形状对应具体编号 - 透明度
alpha
- 填充颜色
fill
并不需要在代码里面都写上,每个属性都有自己的默认值,不想写就直接使用默认
手动设置
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,y=Petal.Length),
color="purple") # 颜色设置这里要带"",而前面映射的时候是不用的
## 这里`color=`是`geom_point()`的参数
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
size=5,
alpha=0.8,
shape=4))
颜色名称一定要是可以识别出来的
映射Mapping
:根据数据框的某一列来定义图的某个属性,即数据映到图像
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
color=Species)) #这里颜色设置是在`aes()`中,是`aes`的参数,后接列名
#而手动是在`geom_function()`中,是`geom_function`的参数,后接具体颜色
#映射:根据数据某一列内容分配颜色
#手动:把图形设置为一个或多个颜色,与数据内容无关
如果想自行指定映射的具体颜色
# 手动指定映射的颜色`scale_color_manual()`
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
color=Species)) + # 这个连接上下文的'+'不要忘记
scale_color_manual(values=c("grey","green","yellow")) # `values=`不可以省略,因为它不是第一个参数
# 自行指定颜色集`scale_color_brewer()`
ggplot(data = iris)+
geom_point(mapping = aes(x=Sepal.Length,
y=Petal.Length,
color=Species)) +
scale_color_brewer(palette = "Set1")
# 颜色选择可以参考十六进制颜色代码 ## 哈哈这是一个美术知识点
# 也可以用配色R包`RColorBrewer`
"red""orange""yellow""green""blue""purple""grey""pink" ## 哈哈娱乐一下
区分color和fill两个属性
# 空心形状、实心形状,只有一个颜色,用`color`设置即可
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
color=Species),
shape=17)
ggplot(data=iris)+
geom_point(mapping=aes(x=Sepal.Length,
y=Petal.Length,
color=Species),
shape=2)
# `fill`是填充,既有边框又有内部颜色才需要`fill`和`color`两个参数
ggplot(data=iris)+
geom_point(mapping = aes(x=Sepal.Length,
y=Petal.Length),
shape=24,
color="red",
fill="yellow")
课堂练习
# 加载`test.Rdata`,以a、b列为横纵坐标,change列映射颜色,画点图
load("test.Rdata")
library(ggplot2)
ggplot(data=test)+
geom_point(aes(a,b,color=change))
# 手动修改颜色
ggplot(data=test)+
geom_point(aes(a,b,color=change))+
scale_color_manual(values=c("darkgreen","grey","red"))
ggplot2
其他代码
# 绘制直方图,针对连续变量
library(ggplot2)
ggplot(data= ,mapping=aes(x= ))+ geom_histogram()
# 绘制柱形图,针对离散变量
library(ggplot2)
ggplot(data= ,mapping=aes(x= ))+ geom_bar()
# 密度图绘制函数
library(ggplot2)
ggplot(data= ,mapping=aes(x= ))+ geom_density()
# 箱线图绘制函数
library(ggplot2)
ggplot(data= ,mapping=aes(x= ))+ geom_box()
# 抖动点
library(ggplot2)
ggplot(data= ,mapping=aes(x= ))+ geom_jitter()
# 线图
geom_line()
# 地毯图
geom_rug()
# 小提琴图
geom_violin()
# 垂线
geom_vline()
# 水平线
geom_hline()
ggplot2
几何对象叠加
# 几何对象可以叠加
ggplot(data=iris)+
geom_smooth(mapping=aes(x=Sepal.Length,y=Petal.Length))+
geom_point(mapping=aes(x=Sepal.Length,y=Petal.Length)) # `geom_function()`括号里属于局部设置
## `geom_smooth()`拟合曲线
ggplot(data=iris,mapping=aes(x=Sepal.Length,y=Petal.Length))+ # `ggplot()`括号里属于全局设置
geom_smooth()+
geom_point()
## 全局设置是对以下所有图层有效
## 局部设置只带该图层有效
利用自带数据练习叠加
ggplot(iris,aes(Species,Sepal.Width,fill=Species))+
geom_boxplot()
ggplot(iris,aes(Species,Sepal.Width,fill=Species))+
geom_boxplot()+
geom_point() # 当你画出来发现这个图有点问题,那么就该往下学习了
代码不报错、图也能画出,就一定是正确的吗?
no no‼️图形很可能表达地不准确,这也是一种错误
ggplot2
另一种点图——jitter
抖动点
# 练习题箱图叠加点图,其中横纵坐标相同的点都重叠在了一个
# 明明有150个点,从图片上不到30个
# 这就是图片不能准确传达数据
# 那么就应该换一种图片表达形式
geom_point(position = "jitter")
geom_jitter() # 两种表达方式都可以
ggplot(iris,aes(Species,Sepal.Width,fill=Species))+
geom_boxplot()+
geom_jitter()
## 注意这个的颜色设定是`fill`参数
## 如果想指定颜色的话,要用`scale_fill_manual`或`scale_fill_brewer`
如果觉得jitter太跳脱,而
point`太呆板,可以考虑蜜蜂图
https://www.yuque.com/xiaojiewanglezenmofenshen/dbwkg1/rhgmyb
ggplot2
转置
# 当你代码已经写完了,而你想更换一下横纵坐标系
# `coord_flip()`效果类似于`t()`
ggplot(iris,aes(Species,Sepal.Width,fill=Species))+
geom_boxplot()+
geom_jitter()+
coord_flip()
ggplot2
主题
theme_bw() #白色背景主题
theme_grey() #默认主题
theme_classic() #经典主题
练习题
ggplot(iris,aes(Sepal.Width,Species))+
geom_violin(aes(fill=Species))+
scale_fill_manual(values=c("lightblue","darkgreen","pink"))+
geom_boxplot()+
geom_jitter(aes(shape=Species))
ggpbur
# 标准代码
library(ggpubr)
p=ggboxplot(iris,x="Sepal.Length",y="Petal.Length",color ="Species",shape="Species",add="jitter")
p
# `ggpbur`和`ggplot2`都是可以赋值的,基础函数包是不可以的
# 赋值有利于后期拼图调整
# `ggpbur`常用于组间比较
p = ggboxplot(iris, x = "Species", y = "Sepal.Length",
color = "Species", shape = "Species",add = "jitter")
p
my_comparisons <- list( c("setosa", "versicolor"), # 先构建两两向量组合的`list`
c("setosa", "virginica"),
c("versicolor", "virginica") )
p + stat_compare_means(comparisons = my_comparisons, # `stat_compare_means`
aes(label = after_stat(p.signif))) # `label = after_stat`
ggpbur
相当于是阉割版的ggplot2
,优点是代码简单明了更易读,缺点是形式更简单
sthda上有大量ggpubr出的图,搜代码直接用,基本不需要系统学习
‼️但它的组间比较功能是hin不错滴
保存与导出图片
# `ggplot2`(包括ggpubr)通用保存代码
ggsave("iris_box_ggpubr.png") # ‘图片的名称’
ggsave(p,filename="iris_box_ggpubr2.png") # `p`是你复制的画图代码
# 查看帮助文档,可以知道保存时如何调整图片细节,比如大小、像素等等
## ‼️注意,纯文本文件的后缀没有决定作用,但是图片文件后缀有,电脑会根据图片后缀决定你用什么软件打开它
# 通用的作图三段论
## 1.保存文件、代码 ggsave("xxx.pdf")
## 2.作图代码. ....
## 3.关闭画板. dev.off()
好用的小工具——eoffice
R包
# 导出格式为ppt,全部元素都是可编辑模式
library(eoffice)
topptx(p,"iris_box_ggpubr.pptx")
## 但当元素过多不合适,ppt会卡
拼图工具——patchwork
R包
# 万事先装包
# 装完不会用就按需百度
公众号:生信星球,搜索
patchwork
,由相关的推送讲解
代码可运行,但不出图
- 可能因为画板被占用,先
dev.off()
运行至null device
- 或者
dev.new()
去哪里找现成的代码
搜狗微信
直接搜索- 微信公众号,大把人教你R语言
STHDA
官网- …
代码好找,关键在于你有没有相应的数据,以及是否有能力处理数据格式以符合代码要求
数据类型、数据结构、组织方式、对应关系都需要对应示例数据一一检查
健明老师推荐的学习资料
https://ggplot2-book.org/facet.html
ggplot2
作者亲自写的书
http://www.sthda.com/english/wiki/ggplot2-essentials sthda网站的ggplot核心图表示例
http://www.cookbook-r.com/Graphs/ 绘图菜谱
http://www.sthda.com/english/wiki/ggplot2-essentials