Checking the color blind friendliness of a number of qualitative palettes.
library(ggplot2)
library(farver)
library(colorspace)
check_colorblindness <- function(colors, ncol = 3, label = TRUE) {
ncolors <- length(colors)
nrow <- ceiling(ncolors / ncol)
cond <- c("Original", "Deutan", "Protan", "Tritan")
ncond <- length(cond)
df <- data.frame(color = c(colors, deutan(colors), protan(colors), tritan(colors)),
cond = rep(cond, each = ncolors),
x = rep(rep(1:ncol, length.out = ncolors), times = ncond),
y = rep(rep(1:nrow, each = ncol)[1:ncolors], times = ncond)) %>%
mutate(cond = factor(cond, levels = .env$cond))
g <- ggplot(df, aes(x, y, fill = I(color))) +
geom_tile(color = "black", size = 1.3) +
theme_void() +
coord_equal() +
facet_wrap(~cond, ncol = 2) +
scale_y_reverse()
if(label) {
g + geom_text(aes(label = color, color = I(label_col)),
data = function(data) data %>%
filter(cond == "Original") %>%
mutate(hcl = decode_colour(colors, to = "hcl"),
label_col = ifelse(hcl[, "l"] > 50, "black", "white")))
} else {
g
}
}
Name | Source | Colors | # of colors | Palette |
---|---|---|---|---|
High contrast | Paul Tol | #FFFFFF, #DDAA33, #BB5566, #004488, #000000 | 5 |
![]() |
Pale | Paul Tol | #BBCCEE, #CCEEFF, #CCDDAA, #EEEEBB, #FFCCCC, #DDDDDD | 6 |
![]() |
Dark | Paul Tol | #222255, #225555, #225522, #666633, #663333, #555555 | 6 |
![]() |
Bright | Paul Tol | #4477AA, #66CCEE, #228833, #CCBB44, #EE6677, #AA3377, #BBBBBB | 7 |
![]() |
Vibrant | Paul Tol | #0077BB, #33BBEE, #009988, #EE7733, #CC3311, #EE3377, #BBBBBB | 7 |
![]() |
Medium constrast | Paul Tol | #FFFFFF, #EECC66, #EE99AA, #6699CC, #997700, #994455, #004488, #000000 | 8 |
![]() |
Okabe Ito | Okabe Ito | #E69F00, #56B4E9, #009E73, #F0E442, #0072B2, #D55E00, #CC79A7, #000000 | 8 |
![]() |
Light | Paul Tol | #77AADD, #99DDFF, #44BB99, #BBCC33, #AAAA00, #EEDD88, #EE8866, #FFAABB, #DDDDDD | 9 |
![]() |
Muted | Paul Tol | #332288, #88CCEE, #44AA99, #117733, #999933, #DDCC77, #CC6677, #882255, #AA4499, #DDDDDD | 10 |
![]() |
Safe |
rcartocolor
|
#88CCEE, #CC6677, #DDCC77, #117733, #332288, #AA4499, #44AA99, #999933, #882255, #661100, #6699CC, #888888 | 12 |
![]() |
Monash primary | Monash | #006DAE, #000000, #FFFFFF, #5A5A5A, #969696, #E6E6E6 | 6 |
![]() |
Monash secondary | Monash | #027EB6, #746FB2, #9651A0, #C8008F, #ee64a4, #EE0220, #D93F00, #795549, #6F7C4D, #008A25 | 10 |
![]() |
### High contrast
c("#FFFFFF", "#DDAA33", "#BB5566", "#004488", "#000000")
### Pale
c("#BBCCEE", "#CCEEFF", "#CCDDAA", "#EEEEBB", "#FFCCCC", "#DDDDDD"
)
### Dark
c("#222255", "#225555", "#225522", "#666633", "#663333", "#555555"
)
### Bright
c("#4477AA", "#66CCEE", "#228833", "#CCBB44", "#EE6677", "#AA3377",
"#BBBBBB")
### Vibrant
c("#0077BB", "#33BBEE", "#009988", "#EE7733", "#CC3311", "#EE3377",
"#BBBBBB")
### Medium constrast
c("#FFFFFF", "#EECC66", "#EE99AA", "#6699CC", "#997700", "#994455",
"#004488", "#000000")
### Okabe Ito
c("#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00",
"#CC79A7", "#000000")
### Light
c("#77AADD", "#99DDFF", "#44BB99", "#BBCC33", "#AAAA00", "#EEDD88",
"#EE8866", "#FFAABB", "#DDDDDD")
### Muted
c("#332288", "#88CCEE", "#44AA99", "#117733", "#999933", "#DDCC77",
"#CC6677", "#882255", "#AA4499", "#DDDDDD")
### Safe
c("#88CCEE", "#CC6677", "#DDCC77", "#117733", "#332288", "#AA4499",
"#44AA99", "#999933", "#882255", "#661100", "#6699CC", "#888888"
)
### Monash primary
c(blue = "#006DAE", black = "#000000", white = "#FFFFFF", gray80 = "#5A5A5A",
gray50 = "#969696", gray10 = "#E6E6E6")
### Monash secondary
c(blue = "#027EB6", purple = "#746FB2", fuchsia = "#9651A0",
ruby = "#C8008F", pink = "#ee64a4", red = "#EE0220", orange = "#D93F00",
umber = "#795549", olive = "#6F7C4D", green = "#008A25")
Figure 1: High contrast palette: #FFFFFF, #DDAA33, #BB5566, #004488, #000000.
Figure 2: Pale palette: #BBCCEE, #CCEEFF, #CCDDAA, #EEEEBB, #FFCCCC, #DDDDDD.
Figure 3: Dark palette: #222255, #225555, #225522, #666633, #663333, #555555.
Figure 4: Bright palette: #4477AA, #66CCEE, #228833, #CCBB44, #EE6677, #AA3377, #BBBBBB.
Figure 5: Vibrant palette: #0077BB, #33BBEE, #009988, #EE7733, #CC3311, #EE3377, #BBBBBB.
Figure 6: Medium constrast palette: #FFFFFF, #EECC66, #EE99AA, #6699CC, #997700, #994455, #004488, #000000.
Figure 7: Okabe Ito palette: #E69F00, #56B4E9, #009E73, #F0E442, #0072B2, #D55E00, #CC79A7, #000000.
Figure 8: Light palette: #77AADD, #99DDFF, #44BB99, #BBCC33, #AAAA00, #EEDD88, #EE8866, #FFAABB, #DDDDDD.
Figure 9: Muted palette: #332288, #88CCEE, #44AA99, #117733, #999933, #DDCC77, #CC6677, #882255, #AA4499, #DDDDDD.
Figure 10: Safe palette: #88CCEE, #CC6677, #DDCC77, #117733, #332288, #AA4499, #44AA99, #999933, #882255, #661100, #6699CC, #888888.
Figure 11: Monash primary palette: #006DAE, #000000, #FFFFFF, #5A5A5A, #969696, #E6E6E6.
Figure 12: Monash secondary palette: #027EB6, #746FB2, #9651A0, #C8008F, #ee64a4, #EE0220, #D93F00, #795549, #6F7C4D, #008A25.
If you see mistakes or want to suggest changes, please create an issue on the source repository.
Text and figures are licensed under Creative Commons Attribution CC BY 4.0. Source code is available at https://github.com/emitanaka/emitanaka.github.io, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".
For attribution, please cite this work as
Tanaka (2022, Feb. 20). emi tanaka: Colorblind checks for qualitative palettes. Retrieved from https://emitanaka.org/posts/2022-02-20-color-considerations/
BibTeX citation
@misc{tanaka2022colorblind, author = {Tanaka, Emi}, title = {emi tanaka: Colorblind checks for qualitative palettes}, url = {https://emitanaka.org/posts/2022-02-20-color-considerations/}, year = {2022} }