是否有可能轻易地使ggplot去饱和?

ika*_*sky 5 markdown r colors ggplot2

是否有可能ggplot轻易去饱和?


原则上,可能有两种可能的策略.
首先,将一些函数应用于ggplot对象(或可能是Grob对象)以使所有颜色去饱和.第二,ggplot在渲染.rmd文件时打印去饱和的一些技巧.这两种策略对我来说都没问题,但第一种策略当然更有意义.从头开始
创建ggplot灰色不是一个好选择,因为这个想法是使用相同的绘图,就好像它是以灰色阴影打印的一样.


关于如何在R中执行去饱和,有一些类似的问题和非常好的答案.是一种去饱和色调的便捷方法.而这里是去饱和的光栅图像的方式.我正在寻找的是一种让整个人饱和的简单方法ggplot.

Cla*_*lke 8

刚刚遇到这个问题.实验包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
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

现在让我们使用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)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

该函数edit_colors()采用ggplot2对象或grob,并将颜色转换函数(此处desaturate)应用于grob 中的所有颜色.

我们可以为转换函数提供额外的参数,例如进行部分去饱和:

gg_des <- edit_colors(gg, desaturate, amount = 0.7)
cowplot::ggdraw(gg_des)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我们还可以进行其他转换,例如色盲模拟:

gg_des <- edit_colors(gg, deutan)
cowplot::ggdraw(gg_des)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

最后,我们可以分别处理线条颜色和填充颜色.例如,我们可以将所有填充区域设为蓝色.(不确定这是有用的,但无论如何.)

gg_des <- edit_colors(gg, fillfun = function(x) "lightblue")
cowplot::ggdraw(gg_des)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述