想让SCI看上去更高逼格?这些绘图技巧你一定要知道!
hi,大家好,不知道上次的可视化学习的怎么样呢? 这一期是咱们零基础开始学画图系列教程的第二期希望大家可以跟着我们的节奏慢慢掌握可视化的绘图流程哦打卡还有神秘惊喜哦那么我们话不多说,继续我们今天的可视化教学吧
下面我们首先对同样的输入数据进行不同的可视化
#制备输入数据
df <- data.frame(
x = c(3, 1, 5),
y = c(2, 4, 6),
label = c("a","b","c")
)
晨曦解读
输入数据永远是我们后续分析的基础和灵魂
#绘图
p <- ggplot(df, aes(x, y, label = label)) +
labs(x = NULL, y = NULL) + # Hide axis label
theme(plot.title = element_text(size = 12)) # Shrink plot title
p + geom_point() + ggtitle("point")
p + geom_text() + ggtitle("text")
p + geom_bar(stat = "identity") + ggtitle("bar")
p + geom_tile() + ggtitle("raster")
晨曦解读
这里我们其实可以看到我们的第一步代码,其实本质上是设立了一个ggplot2对象,真正执行绘图功能并且决定我们后续是何种可视化的是后面geom_xxx函数
p + geom_line() + ggtitle("line")
p + geom_area() + ggtitle("area")
p + geom_path() + ggtitle("path")
p + geom_polygon() + ggtitle("polygon")
晨曦解读
下面可以尝试做一下练习哦~
#下面这些可视化你可以尝试用什么函数进行绘制呢?
1.Scatterplot(geom_point)
2.Line chart(geom_freqpoly)
晨曦解读
这里给大家一个提示
请使用以下工具
Function reference • ggplot2 (tidyverse.org)
前面的图大多数都是针对两个变量,这两个变量不存在分组的情况下
但是让我们假定这样一种情况,我们绘图的数据中存在分组信息
也就是说除了变量X和变量Y以外,还有一个变量group,那么我们应该如何进行绘图呢?
可视化会变成什么样子呢?
#准备输入数据
data(Oxboys, package = "nlme")
head(Oxboys)
#> Subject age height Occasion
#> 1 1 -1.0000 140 1
#> 2 1 -0.7479 143 2
#> 3 1 -0.4630 145 3
#> 4 1 -0.1643 147 4
#> 5 1 -0.0027 148 5
#> 6 1 0.2466 150 6
晨曦解读
从上面的数据我们可以很清楚的看到,这里是存在分组信息的
ggplot(Oxboys, aes(age, height, group = Subject)) +
geom_point() +
geom_line()
晨曦解读
探究一下如果group参数放在aes映射函数的外面会怎么样?
答案是函数不会运行,因为外面的实际参数并没有group函数,但是我们的color参数确实可以在外面,这样的话表示我们自己设定颜色,而不遵循映射
但是,这里我们还有一个疑问,如果我们不指定分组变量,可视化会怎样?
#不指定分组变量
ggplot(Oxboys, aes(age, height)) +
geom_point() +
geom_line()
但是,如果我们没有特定的单一分组变量,而是多组变量来定义,那么我们可以使用下面的方法
这个时候我们可以通过使用interaction()函数来联合多个变量作为我们的变量信息
aes(group = interaction(school_id, student_id)).
如果我们想给我们的可视化添加拟合曲线来让其更加清晰
data(Oxboys, package = "nlme")
head(Oxboys)
ggplot(Oxboys, aes(age, height, group = Subject)) +
geom_line() +
geom_smooth(method = "lm", se = FALSE)
晨曦解读
但是显然上面这个拟合曲线并不是我们想要的
简单来说就是”太多了“!
因为我们每个变量的分组是一样的,我们想要绘制一个基于总体的拟合曲线
而不是每一个线的拟合曲线,所以我们要修改代码
ggplot(Oxboys, aes(age, height)) +
geom_line(aes(group = Subject)) +
geom_smooth(method = "lm", size = 2, se = FALSE)
#> `geom_smooth()` using formula 'y ~ x'
晨曦解读
请仔细思考为什么我的代码改变成这个样子?
答案:其实我们是改变了全局映射和局部映射的关系
简单来说就是当我的分组信息在第一图层(全局映射),我的第一图层就全都是分组信息,然后我的拟合就需要为第一图层的每个分组信息进行拟合
但是当我的分组信息变为局部映射(第二图层),那么我们第二图层分组信息算是一个整体,所以我们拟合曲线是对整个第二图层进行拟合
当然也不需要大家强行理解,感到困惑的时候,简单修改一下,然后可视化一下即可~
比较多个变量最常见的图应该是什么,想必不用晨曦多说了
箱线图它来了
ggplot(Oxboys, aes(Occasion, height)) +
geom_boxplot()
晨曦解读
提问:如果我想要DIY一下,我想要线的颜色改变一下,我需要修改什么参数?
回答:当然我们只需要添加一个geom_line函数就可以啦,因为ggplot2大家可以简单理解就是再玩一个拼图游戏
ggplot(Oxboys, aes(Occasion, height)) +
geom_boxplot() +
geom_line(colour = "#3366FF", alpha = 0.5)
晨曦解读
提问:老师,这个颜色参数去哪里找?我不知道
回答:这个颜色参数有以下两个网站可以找到,我这里都列了出来,大家如果感兴趣可以去看看
Aesthetic specifications • ggplot2 (tidyverse.org)
ColorSpace - Color Palettes Generator and Color Gradient Tool (mycolor.space)
这时候肯定会有小伙伴有疑问
老师,我学这些究竟如何应用在我的分析中的?
那么现在我就来演示一下,绘图技巧在分析中的应用
#这里我们使用前几篇推文中所使用的scRNA-seq的表达矩阵进行演示
expr <-data.frame(FetchData(object = scRNA, vars ="LYZ"))
expr$Barcod<-rownames(expr)
ident<-data.frame()
ident<-data.frame(Barcod=names(Idents(object = scRNA_final)),orig.ident=Idents(object = scRNA_final))
c<-merge(expr,ident,by='Barcod')
晨曦解读
这时候肯定会有小伙伴说
老师,单细胞我不会啊,这我怎么学啊
没事滴,没事滴,我们到最后只是需要这个数据做个演示
就是下面这个样子
大家简单理解就是,LYZ是基因名,orig.ident是分组信息,箱线图其实就需要这两个信息足以
那我们常规的表达矩阵是不是下面这个样子
这个时候我们只需要确定我们要研究的Gene(观测),然后提取该Gene对应的小表达矩阵,然后转置,转换数据框,添加分组信息(这一步往往是参考临床信息得来的)然后也会得到我们最上面的那个数据结构
#简单可视化
library(ggplot2)
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +
geom_boxplot()
#DIY可视化
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +
geom_boxplot()+
theme_bw() +coord_flip()
#可视化横放且去掉灰色背景
#DIY可视化
#箱子太宽不太好看,喜欢“苗条”的
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +
geom_boxplot(notch = F,width=0.5,alpha=0.8) +
theme_bw() +coord_flip()
#DIY可视化
#箱子不好看,想换成小提琴
#可视化的本质其实就是数据
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +
geom_violin(width=0.5,alpha=0.8) +
theme_bw() +coord_flip()
#DIY可视化
#颜色不好看,可以自己选吗?
#调取调色包
install.packages("RColorBrewer")
library("RColorBrewer")
display.brewer.all(colorblindFriendly =TRUE)
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +
scale_fill_brewer(palette ="Blues")+
geom_violin(width=0.5,alpha=0.8) +
theme_bw() +coord_flip()
我是晨曦,我们下期见~
主页回复“晨曦可视化02”,即可获得本次推文的所有示例数据以及代码哦~
晨曦单细胞笔记系列传送门
—
END—
撰文丨晨 曦
排版丨四金兄
主编丨小雪球
欢迎大家关注解螺旋生信频道-挑圈联靠公号~
关键词
变量
orig.ident
技巧
信息
fill=orig.ident
最新评论
推荐文章
作者最新文章
你可能感兴趣的文章
Copyright Disclaimer: The copyright of contents (including texts, images, videos and audios) posted above belong to the User who shared or the third-party website which the User shared from. If you found your copyright have been infringed, please send a DMCA takedown notice to [email protected]. For more detail of the source, please click on the button "Read Original Post" below. For other communications, please send to [email protected].
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。
版权声明:以上内容为用户推荐收藏至CareerEngine平台,其内容(含文字、图片、视频、音频等)及知识版权均属用户或用户转发自的第三方网站,如涉嫌侵权,请通知[email protected]进行信息删除。如需查看信息来源,请点击“查看原文”。如需洽谈其它事宜,请联系[email protected]。