1.生成颜色实例: 参数类似

library(viridis)

#c1=viridis(n=10, alpha = 1, begin = 0, end = 1, direction = 1); c1
c1=viridis(10, alpha = 1, begin = 0, end = 1, direction = 1, option = "A"); c1
##  [1] "#000004FF" "#180F3EFF" "#451077FF" "#721F81FF" "#9F2F7FFF" "#CD4071FF" "#F1605DFF" "#FD9567FF" "#FEC98DFF"
## [10] "#FCFDBFFF"
# n 色彩个数
# alpha 不透明度,1表示完全不透明,0表示完全透明。
# begin 和 end 表示 hue 开始和结束的位置[0,1]
# direction 颜色方向,1从深到浅,-1反之。
# option 表示8种颜色方案,可以换前面的函数名,也可以换 option 种的字母A-H

par(mar=c(0,0,0,0))
barplot( rep(1, length(c1)), col=c1, 
         border=NA, yaxt='n', space=0, main="")

2.官方教程

连续型变量 scale_fill_viridis

library(viridis)
library(ggplot2)
set.seed(2023)
ggplot(data.frame(x = rnorm(10000), y = rnorm(10000)), aes(x = x, y = y)) +
  geom_hex() + #六边形表示数据密度
  coord_fixed() + #长宽比例一致
  scale_fill_viridis() +  #填充颜色
  theme_bw() #主题

离散型变量 scale_color_viridis

library(viridis)
library(ggplot2)
# 离散颜色可用scale_color_viridis() 
p = ggplot(mtcars, aes(wt, mpg))+
  geom_point(aes(colour = factor(cyl)), size=4) +
  theme_bw()
  
p + scale_color_viridis(discrete=TRUE) #默认 option="D"

# 其他配色方案
p + scale_color_viridis(discrete=TRUE, option="H") 

3.查看8种颜色方案

该R包目前提供了8个渐变色方案。默认方案是 viridis(D)。

# 8个配色方案
colors=data.frame(
  color=c("magma", "inferno", "plasma", "viridis",
           "cividis", "rocket", "mako", "turbo"),
  simple=LETTERS[1:8]
)

# 绘图函数
draw=function(color, color.simple, title="", n=100){
  if(title==""){
    title=paste0(color, "(", color.simple ,")", ", n=", n)
  }
  #print(title)
  cols=do.call(color, list(n, alpha = 1, begin = 0, end = 1, direction = -1) )
  barplot( rep(1, length(cols)), col=cols, 
           border=NA, yaxt='n', space=0, main=title)
}

# 开始绘图
par(mfrow=c(8,2), mar=c(0,0,1.5,0) )

for(i in 1:8){
  #print( colors[i, 'color'])
  draw(colors[i, 'color'], colors[i, 'simple'], n=10)
  draw(colors[i, 'color'], colors[i, 'simple'], n=100)
}

4.热图

前7种渐变色都特别适合用于画热图,最后一种 turbo 目测不太适合。

# 生成模拟数据
set.seed(2022)
test =  matrix(rnorm(200), 20, 10)
test[1:10, seq(1, 10, 2)] = test[1:10, seq(1, 10, 2)] + 3
test[11:20, seq(2, 10, 2)] = test[11:20, seq(2, 10, 2)] + 2
test[15:20, seq(2, 10, 2)] = test[15:20, seq(2, 10, 2)] + 4
colnames(test) = paste("Test", 1:10, sep = "")
rownames(test) = paste("Gene", 1:20, sep = "")
#
dim(test)
## [1] 20 10
# Draw heatmaps
library(pheatmap)
pheatmap(test)

# 使用配色方案 viridis
pheatmap(test, color = viridis(8), main="viridis")

# 使用配色方案 mako
pheatmap(test, color = viridis(8, option = "G"), main="mako")