分享

R绘图 ggsci: 高大上的论文配色,一文解决配色问题

 公号生信小课堂 2021-10-28

连续学了几天R语言基础,有点枯燥,今天来继续画图吧

R学习:R for Data Science(一)

R学习:R for Data Science(二)

R学习:R for Data Science(三)

R学习:R for Data Science(四)

R学习:R for Data Science(五)

今天介绍ggsci包,它提供了一系列高质量的调色板,这些调色板的灵感来自于科学期刊、数据可视化库、科幻电影和电视节目中使用的颜色。ggsci中的调色板可用在ggplot2中。


对于所有调色板,相应的比例命名为

  • scale_color_palname()

  • scale_fill_palname()

离散调色板

我们使用带平滑曲线的散点图和条形图来演示ggsci中的离散调色板。

原始配色

library('ggplot2')library('gridExtra')library('ggsci')p1 <- ggplot( subset(diamonds, carat >= 2.2), aes(x = table, y = price, colour = cut)) + geom_point(alpha = 0.7) + geom_smooth(method = "loess", alpha = 0.05, size = 1, span = 1) + theme_bw()
p2 <- ggplot( subset(diamonds, carat > 2.2 & depth > 55 & depth < 70), aes(x = depth, fill = cut)) + geom_histogram(colour = "black", binwidth = 1, position = "dodge") + theme_bw()grid.arrange(p1, p2, ncol = 2)

NPG配色

NPG调色板的灵感来自于自然出版集团出版的期刊中的图表

p1_npg <- p1 + scale_color_npg()p2_npg <- p2 + scale_fill_npg()grid.arrange(p1_npg, p2_npg, ncol = 2)

AAAS配色

p1_aaas <- p1 + scale_color_aaas()p2_aaas <- p2 + scale_fill_aaas()grid.arrange(p1_aaas, p2_aaas, ncol = 2)


NEJM

p1_nejm <- p1 + scale_color_nejm()p2_nejm <- p2 + scale_fill_nejm()grid.arrange(p1_nejm, p2_nejm, ncol = 2)

Lancet

p1_lancet <- p1 + scale_color_lancet()p2_lancet <- p2 + scale_fill_lancet()grid.arrange(p1_lancet, p2_lancet, ncol = 2)

JAMA

p1_jama <- p1 + scale_color_jama()p2_jama <- p2 + scale_fill_jama()grid.arrange(p1_jama, p2_jama, ncol = 2)

JCO

p1_jco <- p1 + scale_color_jco()p2_jco <- p2 + scale_fill_jco()grid.arrange(p1_jco, p2_jco, ncol = 2)

UCSCGB

p1_ucscgb <- p1 + scale_color_ucscgb()p2_ucscgb <- p2 + scale_fill_ucscgb()grid.arrange(p1_ucscgb, p2_ucscgb, ncol = 2)

D3

p1_d3 <- p1 + scale_color_d3()p2_d3 <- p2 + scale_fill_d3()grid.arrange(p1_d3, p2_d3, ncol = 2)

LocusZoom

p1_locuszoom <- p1 + scale_color_locuszoom()p2_locuszoom <- p2 + scale_fill_locuszoom()grid.arrange(p1_locuszoom, p2_locuszoom, ncol = 2)

IGV

p1_igv_default <- p1 + scale_color_igv()p2_igv_default <- p2 + scale_fill_igv()grid.arrange(p1_igv_default, p2_igv_default, ncol = 2)

COSMIC

p1_cosmic_hallmarks_light <- p1 + scale_color_cosmic("hallmarks_light")p2_cosmic_hallmarks_light <- p2 + scale_fill_cosmic("hallmarks_light")grid.arrange(p1_cosmic_hallmarks_light, p2_cosmic_hallmarks_light, ncol = 2)

p1_cosmic_hallmarks_dark <- p1 + scale_color_cosmic("hallmarks_dark")p2_cosmic_hallmarks_dark <- p2 + scale_fill_cosmic("hallmarks_dark")grid.arrange(p1_cosmic_hallmarks_dark, p2_cosmic_hallmarks_dark, ncol = 2)

p1_cosmic_signature <- p1 + scale_color_cosmic("signature_substitutions")p2_cosmic_signature <- p2 + scale_fill_cosmic("signature_substitutions")grid.arrange(p1_cosmic_signature, p2_cosmic_signature, ncol = 2)

UChicago

p1_uchicago <- p1 + scale_color_uchicago()p2_uchicago <- p2 + scale_fill_uchicago()grid.arrange(p1_uchicago, p2_uchicago, ncol = 2)

Star Trek

p1_startrek <- p1 + scale_color_startrek()p2_startrek <- p2 + scale_fill_startrek()grid.arrange(p1_startrek, p2_startrek, ncol = 2)

Tron Legacy

p1_tron <- p1 + theme_dark() + theme( panel.background = element_rect(fill = "#2D2D2D"), legend.key = element_rect(fill = "#2D2D2D")) + scale_color_tron()p2_tron <- p2 + theme_dark() + theme( panel.background = element_rect(fill = "#2D2D2D")) + scale_fill_tron()grid.arrange(p1_tron, p2_tron, ncol = 2)

Futurama

p1_futurama <- p1 + scale_color_futurama()p2_futurama <- p2 + scale_fill_futurama()grid.arrange(p1_futurama, p2_futurama, ncol = 2)

Rick and Morty

p1_rickandmorty <- p1 + scale_color_rickandmorty()p2_rickandmorty <- p2 + scale_fill_rickandmorty()grid.arrange(p1_rickandmorty, p2_rickandmorty, ncol = 2)

The Simpsons

p1_simpsons <- p1 + scale_color_simpsons()p2_simpsons <- p2 + scale_fill_simpsons()grid.arrange(p1_simpsons, p2_simpsons, ncol = 2)

连续调色板

我们将使用相关矩阵可视化来演示ggsci中的连续调色板。

library("reshape2")
data("mtcars")cor <- cor(unname(cbind(mtcars, mtcars, mtcars, mtcars)))cor_melt <- melt(cor)
p3 <- ggplot( cor_melt, aes(x = Var1, y = Var2, fill = value)) + geom_tile(colour = "black", size = 0.3) + theme_bw() + theme( axis.title.x = element_blank(), axis.title.y = element_blank() )p3

GSEA

p3_gsea <- p3 + scale_fill_gsea()p3_gsea_inv <- p3 + scale_fill_gsea(reverse = TRUE)grid.arrange(p3_gsea, p3_gsea_inv, ncol = 2)

Material Design

材料设计调色板来自材料设计颜色指南。我们首先生成一个随机矩阵:

library("reshape2")
set.seed(121)k <- 9x <- diag(k)x[upper.tri(x)] <- runif(sum(1:(k - 1)), 0, 1)x_melt <- melt(x)
p4 <- ggplot(x_melt, aes(x = Var1, y = Var2, fill = value)) + geom_tile(colour = "black", size = 0.3) + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0)) + theme_bw() + theme( legend.position = "none", plot.background = element_blank(), axis.line = element_blank(), axis.ticks = element_blank(), axis.text.x = element_blank(), axis.text.y = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), panel.background = element_blank(), panel.border = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank() )p4

使用19个材质设计调色板绘制矩阵:

grid.arrange( p4 + scale_fill_material("red"), p4 + scale_fill_material("pink"), p4 + scale_fill_material("purple"), p4 + scale_fill_material("deep-purple"), p4 + scale_fill_material("indigo"), p4 + scale_fill_material("blue"), p4 + scale_fill_material("light-blue"), p4 + scale_fill_material("cyan"), p4 + scale_fill_material("teal"), p4 + scale_fill_material("green"), p4 + scale_fill_material("light-green"), p4 + scale_fill_material("lime"), p4 + scale_fill_material("yellow"), p4 + scale_fill_material("amber"), p4 + scale_fill_material("orange"), p4 + scale_fill_material("deep-orange"), p4 + scale_fill_material("brown"), p4 + scale_fill_material("grey"), p4 + scale_fill_material("blue-grey"), ncol = 6)

从上图中我们可以看到,尽管所有的图都显示了一个相同的矩阵,但是一些调色板比其他调色板更舒服,因为我们的眼睛对饱和度的变化更敏感

Non-ggplot2 Graphics

要将ggsci中的调色板应用于其他图形系统(如基础图形和晶格图形),只需使用上表中的调色板生成器函数。例如:

mypal <- pal_npg("nrc", alpha = 0.7)(9)mypal## [1] "#E64B35B2" "#4DBBD5B2" "#00A087B2" "#3C5488B2" "#F39B7FB2" "#8491B4B2"## [7] "#91D1C2B2" "#DC0000B2" "#7E6148B2"
library("scales")show_col(mypal)

您将能够使用生成的十六进制颜色代码为这样的图形系统相应。整个调色板的透明级别很容易通过每个生成器或scale函数中的参数“alpha”进行调整。

好了,今天的分享就到这里

福利专用贴:福利专用贴

目前有

1. 火山图,热图示例文件及完整代码

2. R语言学习基础知识代码

3. R语言实战(中文完整版)

4. R数据科学(中文完整版)

5. ggplot2:数据分析与图形艺术

6. 30分钟学会ggplot2

7. TCGA数据整理

8. ggplot2速查表pdf(可复制)

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多