许多数据类型的R颜色调色板

34

有没有适合在R语言中处理多种数据类的颜色调色板包?我有16个连续数据类。我尝试了RColorBrewer,但最多只能处理9个数据类,我还尝试了rainbow(),但对于连续数据不太吸引人。谢谢。


2
scalesmunsell值得一看。 - baptiste
这个链接可能会有用:https://dev59.com/pW025IYBdhLWcg3wVkUR#6076605 - Ben Bolker
NTSC?http://zh.wikipedia.org/wiki/Color_Graphics_Adapter - Brandon Bertelsen
7个回答

53

经过多次实验,我得出了25种最容易区分的颜色。这适用于分类数据,而不是连续/顺序数据。

c25 <- c(
  "dodgerblue2", "#E31A1C", # red
  "green4",
  "#6A3D9A", # purple
  "#FF7F00", # orange
  "black", "gold1",
  "skyblue2", "#FB9A99", # lt pink
  "palegreen2",
  "#CAB2D6", # lt purple
  "#FDBF6F", # lt orange
  "gray70", "khaki2",
  "maroon", "orchid1", "deeppink1", "blue1", "steelblue4",
  "darkturquoise", "green1", "yellow4", "yellow3",
  "darkorange4", "brown"
)
pie(rep(1, 25), col = c25)


1
这是一个很棒的调色板,但我担心它不能处理连续数据。 - Julio Diaz
2
优秀的调色板!谢谢!这是一个修改过的c16版本:c(“dodgerblue2”,“#E31A1C”,“green4”,“#6A3D9A”,“#FF7F00”,“black”,“gold1”,“skyblue2”,“palegreen2”,“#FDBF6F”,“gray70”,“maroon”,“orchid1”,“darkturquoise”,“darkorange4”,“brown”) - Adam Erickson
@JulioDiaz:对于连续数据,请尝试使用scico:基于科学颜色地图的调色板viridis - Tung
非常感谢您提供这个漂亮的调色板!!:D - Nonopov

26

pals 包含多个不同的调色板,每个调色板都设计有独特的颜色。以下是可用的调色板:

library(pals)
pal.bands(alphabet, alphabet2, cols25, glasbey, kelly, polychrome, 
  stepped, tol, watlington,
  show.names=FALSE)

Discrete color palettes in pals package


3
谢谢!请注意,在ggplot2中,您需要使用unname(alphabet())等方法来删除颜色名称。 - Simon Woodward
1
为了我未来的自己和其他人,一个示例用法是scale_colour_manual(values=unname(glasbey()))。适应、尝试、享受其中的乐趣。 - undefined

18

Polychrome软件包可以创建具有多个不同颜色的调色板。以下是一些示例:

# install.packages("Polychrome")
library(Polychrome)

# build-in color palette
Glasbey = glasbey.colors(32)
swatch(Glasbey)


# create your own color palette (36 colors) based on `seedcolors`
P36 = createPalette(36,  c("#ff0000", "#00ff00", "#0000ff"))
swatch(P36)


# create your own color palette (50 colors) based on `seedcolors`
P50 = createPalette(50,  c("#ff0000", "#00ff00", "#0000ff"))
swatch(P50)


1
该软件包的背景、动机和主要用例在《统计软件开放获取期刊》的一篇文章中由作者进行了详细描述(https://doi.org/10.18637/jss.v090.c01)。 - Lino Ferreira

11

在我的经验中,我发现对于我来说最好的方法是手动创建调色板。在这里,我分享了我的调色板以及绘制多边形的方法。

# https://dev59.com/_G_Xa4cB1Zd3GeqP6evc
cuts <- function(x) {
    n <- length(x) %/% 4
    map <- rep(c(rep(TRUE,4),FALSE), n)
    result <- rep(NA, n*5)
    result[map] <- x
    result
    }
{
rownumber <- 5
xfloor    <- 0
yheight   <- 6
widthCol  <- 1
colSpacer <- 0.2
# names in: http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf
manualcolors<-c('black','forestgreen', 'red2', 'orange', 'cornflowerblue', 
                'magenta', 'darkolivegreen4', 'indianred1', 'tan4', 'darkblue', 
                'mediumorchid1','firebrick4',  'yellowgreen', 'lightsalmon', 'tan3',
                "tan1",'darkgray', 'wheat4', '#DDAD4B', 'chartreuse', 
                'seagreen1', 'moccasin', 'mediumvioletred', 'seagreen','cadetblue1',
                "darkolivegreen1" ,"tan2" ,   "tomato3" , "#7CE3D8","gainsboro")

squareVec<-c(rep(rownumber,ceiling(length(manualcolors)/rownumber) ) )

map<-mapybot<-mapytop<-mapxbot<-mapxtop<-numeric()

for (i in 1:length(squareVec)){
    map <- seq(0, 5, length.out = squareVec[i]+1 )
    mapybot <- c(mapybot,(map[1:(length(map)-1)] ) )
    mapytop <- mapybot + (map[2]-map[1] )
    mapxbot <- c(mapxbot,(rep(xfloor + (widthCol*(i-1)), squareVec[i]) ) )
    mapxtop <- c(mapxtop,(rep(xfloor + (widthCol* i ) - colSpacer,squareVec[i]) ) )
}

x <- cbind(mapxbot,mapxbot,mapxtop,mapxtop ) 
y <- cbind(mapybot,mapytop,mapytop,mapybot )

opar<-par(no.readonly=TRUE) # save par

par(mar=c(0,0,0,0), font=2)
plot("", xlim=c(-0.2,max(x)), ylim=c(min(y), max(y)), 
     ylab = "", xaxt='n', 
     xlab = "", yaxt='n',
     main = NULL)

polygon(x=cuts(t(x)), y=cuts(t(y)), col=manualcolors, lwd=2)

text(x=t(x[1:length(manualcolors)]), 
     y=t(y[1:length(manualcolors)])+(yheight/rownumber)/2, 
     labels= manualcolors, 
     cex=0.8, col="white", pos=4
     )

par(opar) # restore par
}

enter image description here


10
对于色盲的观众,请查看rcartocolor包中的Safe调色板。该调色板由12种易于区分的颜色组成。
# install.packages("rcartocolor")
# or
# install.packages("remotes")
# remotes::install_github("Nowosad/rcartocolor")
library(rcartocolor)

nColor <- 12
scales::show_col(carto_pal(nColor, "Safe"))

另一个广受欢迎的色盲友好调色板是Okabe Ito scale

例子:

library(ggplot2)
library(rcartocolor)
library(patchwork)
theme_set(theme_classic(base_size = 14) + theme(panel.background = element_rect(fill = "#f6f1eb")))

set.seed(123)
df <- data.frame(x = rep(1:5, 8), 
                 value = sample(1:100, 40), 
                 variable = rep(paste0("category", 1:8), each = 5))

safe_pal <- carto_pal(12, "Safe")

# https://github.com/clauswilke/colorblindr/blob/master/R/palettes.R
palette_OkabeIto <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", 
                      "#0072B2", "#D55E00", "#CC79A7", "#999999")
palette_OkabeIto_black <- c("#E69F00", "#56B4E9", "#009E73", "#F0E442", 
                            "#0072B2", "#D55E00", "#CC79A7", "#000000")

# plot
p1 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_line(aes(colour = variable), size = 1) +
  scale_color_manual(values = palette_OkabeIto_black)


p2 <- ggplot(data = df, aes(x = x, y = value)) + 
  geom_col(aes(fill = variable)) +
  scale_fill_manual(values = safe_pal)

p1 / p2


7

5
尝试使用'?colorRampPalette'并创建自己的函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接