R绘图配色总结

日常瞎掰

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容