R plotR for statisticsresearch

R绘图配色总结

2023-03-17  本文已影响0人  生信云笔记

日常瞎掰

  一图胜千言,说明了其作为一种展现形式在呈现数据结果时的重要性。虽说图的本质是用来展示结果,其最主要的功能是以简单的形式说明数据中蕴含的意义,但有时候好看的外表也是一种加分项,例如图型的布局,颜色搭配等。好的颜色搭配不仅看起来赏心悦目,更重要的作用应该是能增加数据中的辨识度,给人一目了然的感觉,而不是晕倒在五彩斑斓的迷离中。虽然俺也不善于颜色搭配,但这并不妨碍咱站在巨人的肩膀上来为图增添一抹色彩。下面咱们就来谈谈R语言里,那些好用的配色方案。

RColorBrewer

  RColorBrewer包做为老牌调色板,其提供了3类调色板:1、连续性(sequential)
,生成一系列连续渐变的颜色(共18组颜色,每组9个渐变色);2、 离散型(diverging),生成两端深色、中部浅色的系列颜色(共9组颜色,每组11个颜色),可用来标记数据中的离群点,适用于突显极端数值;3、定性型(qualitative),生成一些列彼此差异比较明显的颜色,通常用来标记分类数据。

  1. 颜色查看
      display.brewer.all可用来展示预设调色板,默认展示所有调色板,也可指定名称展示某个调色板。brewer.pal.info也可用来查看调色板的信息。
display.brewer.all(type='seq')
display.brewer.all(type='div')
display.brewer.all(type='qual')
display.brewer.all(6, select='Set1')
display.brewer.all()

结果如下:

  1. 颜色使用
      brewer.pal函数用来使用调色板的颜色,需要两个参数:第一个指定颜色数量,最大为选取的调色板的颜色个数;第二个是调色板名称:
mycolor <- brewer.pal(8,'Set1')
mycolor
[1] "#E41A1C" "#377EB8" "#4DAF4A" "#984EA3" "#FF7F00" "#FFFF33" "#A65628" "#F781BF"

image(1:8,1,as.matrix(1:8),col=mycolor,xlab='',ylab='',axes=F)

结果如下:

  1. 自定义颜色
      colorRampPalette函数可以根据给定的颜色返回一个颜色生成函数,可以调用这个颜色函数生成一系列颜色,数量可以自定义。该方法很适合生成渐变色:
mycolor <- colorRampPalette(c('red','blue'))(10)
mycolor
 [1] "#FF0000" "#E2001C" "#C60038" "#AA0055" "#8D0071" "#71008D" "#5500AA"
 [8] "#3800C6" "#1C00E2" "#0000FF"

image(1:10,1,as.matrix(1:10),col=mycolor,xlab='',ylab='',axes=F)

结果如下:

  colorRamp函数也可根据给定颜色返回一个颜色函数,然后调用颜色来生成一系列颜色,该方法会返回一个矩阵,内含RGB格式的颜色编码,一行一个颜色,可以借助rgb函数来解读:

colmat <- colorRamp(c("blue", "green"))((0:4)/4)
colmat 
     [,1]   [,2]   [,3]
[1,]    0   0.00 255.00
[2,]    0  63.75 191.25
[3,]    0 127.50 127.50
[4,]    0 191.25  63.75
[5,]    0 255.00   0.00

mycolor <- rgb(colmat,max=255)
mycolor 
[1] "#0000FF" "#003FBF" "#007F7F" "#00BF3F" "#00FF00"

image(1:5,1,as.matrix(1:5),col=mycolor,xlab='',ylab='',axes=F)

结果如下:

  使用该方法需要注意一点,调用颜色函数时,输入的是[0-1]的数字向量,如这里的(0:4)/4为向量c(0.00, 0.25, 0.50, 0.75, 1.00),一个数字会生成一个颜色。

colorRamp2

  colorRamp2函数来自于R包circlize,从名字可以看出该函数与上面的colorRamp关系。该函数根据指定端点向量和颜色向量返回一个颜色函数,然后调用颜色函数时输入一个数字向量,就会根据值的大小映射不同的颜色。可见,该函数很适用于热图:

library(circlize)

col_fun <- colorRamp2(c(-1, 0, 1), c("green", "white", "red"))
mycolor <- col_fun(c(-2, -1, -0.5, 0, 0.5, 1, 2))
mycolor
[1] "#00FF00FF" "#00FF00FF" "#B1FF9AFF" "#FFFFFFFF" "#FF9E81FF" "#FF0000FF" "#FF0000FF"

image(1:5,1,as.matrix(1:5),col=mycolor,xlab='',ylab='',axes=F)

结果如下:

DiscretePalette_scCustomize

  该函数来自于单细胞可视化scCustomize包,里面内置了两大类颜色调色板:

  1. Continuous Palettes
    viridis_plasma_dark_high
    viridis_plasma_light_high
    viridis_magma_dark_high
    viridis_magma_light_high
    viridis_inferno_dark_high
    viridis_inferno_light_high
    viridis_dark_high
p1 <- FeaturePlot_scCustom(seurat_object = pbmc, features = "CD3E")
p2 <- FeaturePlot_scCustom(seurat_object = pbmc, colors_use = viridis_magma_dark_high, features = "CD3E")
p3 <- FeaturePlot_scCustom(seurat_object = pbmc, colors_use = viridis_inferno_dark_high, features = "CD3E")
p4 <- FeaturePlot_scCustom(seurat_object = pbmc, colors_use = viridis_light_high, features = "CD3E")

结果如下:

  1. Discrete Palettes
    alphabet (24)
    alphabet2 (24)
    glasbey (32)
    polychrome (36)
    stepped (24)
    ditto_seq (40)
    varibow (Dynamic)
PalettePlot(palette = DiscretePalette_scCustomize(num_colors = 26, palette = "alphabet"))
PalettePlot(palette = c("color1", "color2", ...)

结果如下:

结束语

  颜色搭配对于可视化来说还是有一定影响的,虽然说大家的审美观可能不一致,没有必要追求让所有人都认可的美,但在不过分耗费时间的基础上做出符合大众审美的图岂不是美哉!毕竟,图是用来展示给别人看的,美不美观可能影响到的不仅仅是图像本身了!既然,现在有了这么多现成的配色方案,咱们也可以顺手为自己的图润色来提升一下颜值了。

往期回顾

saddleplot | A/B compartments
双曲线火山图一键拿捏
ChIP-seq数据质控
ChatGPT!见证AI的力量!
ChIPseeker绘图函数借用

上一篇下一篇

猜你喜欢

热点阅读