刚刚遇到这个问题。实验包 colorblindr(由 Claire McWhite 和我自己编写)包含一个可以以通用方式执行此操作的函数。我正在使用@hrbrmstr 中的示例图:
library(ggplot2)
library(viridis)
gg <- ggplot(mtcars) +
geom_point(aes(x=mpg, y=wt, fill=factor(cyl), size=factor(carb)),
color="black", shape=21) +
scale_fill_viridis(discrete = TRUE) +
scale_size_manual(values = c(3, 6, 9, 12, 15, 18)) +
facet_wrap(~am)
gg
现在让我们使用以下方法降低该图的饱和度edit_colors()
colorblindr 的函数:
library(colorblindr) # devtools::install_github("clauswilke/colorblindr")
library(colorspace) # install.packages("colorspace", repos = "http://R-Forge.R-project.org") --- colorblindr requires the development version
# need also install cowplot; current version on CRAN is fine.
gg_des <- edit_colors(gg, desaturate)
cowplot::ggdraw(gg_des)
功能edit_colors()
采用 ggplot2 对象或 grob 并应用颜色转换函数(此处desaturate
) 到 grob 中的所有颜色。
我们可以为转换函数提供额外的参数,例如进行部分去饱和:
gg_des <- edit_colors(gg, desaturate, amount = 0.7)
cowplot::ggdraw(gg_des)
我们还可以进行其他转换,例如色盲模拟:
gg_des <- edit_colors(gg, deutan)
cowplot::ggdraw(gg_des)
最后,我们可以分别操纵线条颜色和填充颜色。例如,我们可以将所有填充区域设为蓝色。 (不确定这是否有用,但无论如何。)
gg_des <- edit_colors(gg, fillfun = function(x) "lightblue")
cowplot::ggdraw(gg_des)