是否可以轻松地使ggplot脱饱和?

原则上,可能有两种策略。
首先,将某种功能应用于ggplot对象(或可能的Grob对象)以使所有颜色去饱和。其次,一些技巧在渲染ggplot文件时打印去饱和的.rmd。两种策略对我来说都是可以的,但是第一种当然是更挑衅的。
从一开始就以灰色创建ggplot并不是一个好选择,因为它的想法是要具有与以灰色阴影打印相同的图。

关于如何在R中执行去饱和操作,也存在一些类似的问题,并且给出了非常好的答案。Here是使调色板去饱和的便捷方法。 here是使栅格图像去饱和的方法。我正在寻找的是一种使整个ggplot降低饱和度的简单方法。

最佳答案

刚遇到这个问题。实验包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

r - 可以容易地使ggplot脱饱和吗?-LMLPHP

现在,让我们使用colorblindr中的edit_colors()函数对图进行去饱和处理:
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)

r - 可以容易地使ggplot脱饱和吗?-LMLPHP

函数edit_colors()接受ggplot2对象或grob,并将颜色转换功能(此处为desaturate)应用于grob中的所有颜色。

我们可以为转换函数提供其他参数,例如做部分去饱和:
gg_des <- edit_colors(gg, desaturate, amount = 0.7)
cowplot::ggdraw(gg_des)

r - 可以容易地使ggplot脱饱和吗?-LMLPHP

我们还可以进行其他转换,例如色盲模拟:
gg_des <- edit_colors(gg, deutan)
cowplot::ggdraw(gg_des)

r - 可以容易地使ggplot脱饱和吗?-LMLPHP

最后,我们可以分别操纵线条颜色和填充颜色。例如,我们可以将所有填充区域设为蓝色。 (不确定这是否有用,但无论如何。)
gg_des <- edit_colors(gg, fillfun = function(x) "lightblue")
cowplot::ggdraw(gg_des)

r - 可以容易地使ggplot脱饱和吗?-LMLPHP

关于r - 可以容易地使ggplot脱饱和吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32147307/

10-12 17:36