从零开始学画图(3)
hi,小伙伴们大家好
上次说到配色的问题,那么这里就彻底把配色给说清楚,也算是给基础绘图总一个基本的总结
首先调用我们的表达数据
#调取上一篇推文的表达数据library(Seurat)expr <- data.frame(FetchData(object = scRNA, vars = "LYZ"))expr$Barcod<-rownames(expr)ident<-data.frame()ident<-data.frame(Barcod=names(Idents(object = scRNA)),orig.ident=Idents(object = scRNA))c<-merge(expr,ident,by='Barcod')#展示一下数据head(c)# Barcod LYZ orig.ident#1 AAACATACAACCAC-1 1.635873 Memory CD4 T#2 AAACATTGAGCTAC-1 1.962726 B#3 AAACATTGATCAGC-1 1.995416 Memory CD4 T#4 AAACCGTGCTTCCG-1 4.521175 CD14+ Mono#5 AAACCGTGTATGCG-1 0.000000 NK#6 AAACGCACTGGTAC-1 1.726902 Memory CD4 T#其实就是我们Gene和分组信息的对应关系
晨曦解读
上次评论里有小伙伴说配色比较丑
小伙伴们的意见每一条晨曦都看着,针对配色比较丑的问题,因为这几期推文是一个基础向的推文,涉及到的都是一些比较基础的色彩调试,当然在这一期我也会展示更多颜色调节的方式,希望可以帮助到学习中的小伙伴
#简单绘图library(ggplot2)ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) + geom_boxplot()#这里的配色采用的是ggplot2内置的映射逻辑,通过映射分组变量来自动调节颜色
晨曦解读
如果不想要ggplot2自主映射颜色

那么就需要涉及到scale系列函数
分别是scale_fill_gradient函数、scale_color_continuous函数
其中柱状图、箱线图等需要填充颜色的适用scale_fill_gradient函数
对于点图、折线图等则使用scale_color_continuous函数
当然有的时候会出现scale_color_manual函数以及scale_color_brewer函数,那么这些又是什么意思呢?
其实大家可以把这个scale系列函数拆成三部分
1. 调节颜色的固定开头scale
2. 针对不同可视化形式的fill以及color
3. 还有就是可以直接指定颜色的manual、调取调色板的brewer、以及使用渐变灰色的grey
这三个部分的随意组合,就组合出来了很多用于颜色设置的函数
但是光说可能比较模糊,我们马上实战起来看看
mycol <- c("#845EC2","#D65DB1","#FF6F91","#FF9671","#FFC75F","#F9F871","#58CDD9","#7A142C","#5D90BA","#431A3D","#91612D","#6E568C","#E0367A","#D8D155","#64495D","#7CC767")ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) + scale_fill_manual(values = mycol)+ geom_boxplot()
晨曦解读
当然更多配色只需要调节mycol变量内的颜色参数即可

这时候会有小伙伴们,颜色参数从哪里获得,推荐下面这个网站颜色参数获取直观,颜值超高
ColorSpace - Color Palettes Generator and Color Gradient Tool (mycolor.space)
然后我们继续
除了通过ggplot2里的函数调节绘图颜色,有一些R包也是十分好用的
我们这里简单介绍几款
首先是ColorBrewer包
这个R包提供了3套配色方案,分别为连续型、极端型以及离散型
library(RColorBrewer)display.brewer.all()
调用方法很简单,直接和ggplot2中的scale系列函数连用即可
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) + scale_fill_brewer(palette = "Spectral")+ geom_boxplot()
然后下一个R包是ggsci包
这个应该是一个比较出名的R包了,其配色方案主要来自己SCI期刊论文
也是我个人常常使用的配色R包
library(ggsci)vignette("ggsci")#通过上面这个命令快速各个杂志期刊配色方案的函数代码
ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) + scale_fill_lancet()+ geom_boxplot()#上面就可以调用柳叶刀杂志的图片配色方案
晨曦解读
这个R包其实是我个人非常常用的一个R包,而且现在很多SCI级别的期刊上包括的配色这个R包都是涉及到的,所以推荐~
然后到这里阶段性总结一下我们常见的配色工具
分别是ggplot2中的scale系列函数结合colorspace网站的颜色参数构建配色体系
另外就是ColorBrewer包的内置调色盘
最后就是ggsci包所提供的主流期刊的配色体系
这三大配色工具可以解决80%以上的配色问题
这里再来介绍一个号称有2100种调色板,内含52个R包的配色包——paletteer包
#安装install.packages("paletter")library(paletteer)安装成功后我们先来探索一下这个R包的组成head(palettes_d_names)#调取离散型调色板# package palette length type#1 awtools a_palette 8 qualitative#2 awtools ppalette 8 qualitative#3 awtools bpalette 16 qualitative#4 awtools gpalette 4 qualitative#5 awtools mpalette 9 qualitative#6 awtools spalette 6 qualitative
晨曦解读
这几个变量分别代表着:R包、调色板、调色板中的颜色数量、调色板类型
既然有离散型就会有连续型,我们下面继续看
head(palettes_c_names)#调取连续型调色板# package palette type#1 gameofthrones baratheon sequential#2 gameofthrones greyjoy sequential#3 gameofthrones jon_snow sequential#4 gameofthrones lannister sequential#5 gameofthrones martell sequential#6 gameofthrones stark sequential
晨曦解读
这几个变量分别表示R包、调色板、调色板类型
然后既然知道了颜色组成,那么我们来看一下如何调用其颜色
#离散型调色板scale_color_paletteer_d(palette, direction = 1, dynamic = FALSE, ...)scale_fill_paletteer_d(palette, direction = 1dynamic = FALSE, ...)# 连续型调色板scale_color_paletteer_c(palette, direction = 1, ...)scale_fill_paletteer_c(palette, direction = 1, ...)scale_color_paletteer_binned(palette, direction = 1, ...)scale_fill_paletteer_binned(palette, direction = 1, ...)palette # 调色板名称的字符串,格式必须是packagename::palettenamedirection # 取值为1或-1,为-1则逆转调色板的颜色#上面的格式就是我们平时在绘图中需要调用的代码样式
晨曦解读
看到这个熟悉的代码编写,其内在框架依旧是基于ggplot2
到后期小伙伴们会发现,大部分的绘图包都是基于ggplot2语法的,所以这也是前期为什么会有一系列的ggplot2基础教程,晨曦想要写的推文是想要达到:道生一,一生二的局面
扯远啦~,我们继续~
#查看一下每个调色板中的颜色paletteer_d("nord::frost")paletteer_d("wesanderson::Royal1", 4)paletteer_d("Redmonder::dPBIPuOr", 10, type = "continuous")
#绘图实战ggplot(c,aes(orig.ident,LYZ,fill=orig.ident)) +geom_boxplot()+scale_fill_paletteer_d("ggthemes::Traffic")
晨曦解读
提问:晨曦,这个包的配色这么多,我该如何选择呢?
回答:前面有两个函数分别是调取离散/连续调色板的函数,打开以后慢慢对照选择,这个R包的特点就是配色丰富,所以也会有一个相应的缺点就是因为太丰富而造成的选择困难
提问:感觉推文中配出来的颜色还是不好看是为什么?
回答:我个人审美的原因QAQ
好啦,至此晨曦的ggplot2系列教程就算是到这里可以画上一个不算圆满的句号了~
说一下总结吧
我们首先讲解了ggplot2的基本绘图逻辑,讲解了ggpplot2中的一些比较难以理解的概念,随后讲解了配色的选择以及所需要的工具
在晨曦学到现在,个人感觉大部分的可视化R包均是基于ggplot2包,所以其内在的语法都是相似的,一通则百通的道理就是这样
然后给看到这里的小伙伴们一个彩蛋吧
#我们如果看到一张美图应该如何复现的逻辑~#第一步:定位这个图的样式:火山图、折线图、点图、直方图等等#第二步:然后首先观察横纵坐标,因为ggplot2是一个叠加类型的函数,所以我们可以先确定底层图片,也就是先画一个底层图#第三步:添加图内元素,点或者折现或者方块#第四步:进行颜色及大小的调试#第五步:完成绘图
晨曦解读
晨曦本人复现的图也很少,其实也不到20张,所以这个只是我个人摸索出来的一个绘图的逻辑,希望可以帮助到正在学习的你们
那么我们就期待在下一个专题再见吧~
我是晨曦,我们下次再见~
主页回复“晨曦可视化03,即可获得本次推文的所有示例数据以及代码哦~
晨曦单细胞笔记系列传送门
END

撰文丨晨   曦
排版丨四金兄
主编丨小雪球
欢迎大家关注解螺旋生信频道-挑圈联靠公号~
继续阅读
阅读原文