在R ggplot2中能否全局设置色盲友好配色而非逐图添加?
全局设置ggplot2的色盲友好配色方案
当然可以实现全局设置色盲友好配色!不过得调整下你的代码思路——theme_set()是用来配置绘图主题(比如背景、坐标轴样式、图例位置这类非数据元素)的,颜色比例尺并不属于theme的范畴,所以不能直接把配色函数加到theme_set()里。不过我们有几种简单的方法,能让你不用每次画图都重复写scale_color_colorblind()。
方法1:修改ggplot2全局选项,默认启用色盲友好配色
ggplot2允许通过全局选项来设置默认的离散颜色/填充比例尺,只需要把你想用的色盲友好配色函数赋值给对应的选项就行。比如用你提到的几种配色:
# 先加载依赖包 library(ggplot2) library(scales) # 提供colorblind_pal() library(ggthemes) # 提供tableau_color_pal() library(dichromat) # 提供dichromat_pal() # 示例1:设置默认配色为scales包的colorblind_pal options( ggplot2.discrete.colour = colorblind_pal(), ggplot2.discrete.fill = colorblind_pal() ) # 示例2:换成tableau的colorblind10配色 # options( # ggplot2.discrete.colour = tableau_color_pal("colorblind10"), # ggplot2.discrete.fill = tableau_color_pal("colorblind10") # ) # 示例3:使用dichromat的BluetoOrange.10配色 # options( # ggplot2.discrete.colour = dichromat_pal("BluetoOrange.10"), # ggplot2.discrete.fill = dichromat_pal("BluetoOrange.10") # ) # 现在随便画个图,默认就会用你设置的色盲友好配色 ggplot(mtcars, aes(x = wt, y = mpg, color = factor(cyl))) + geom_point(size = 3)
方法2:创建一个基础绘图模板
如果需要同时固定主题和配色,可以先定义一个包含主题+配色的基础ggplot对象,之后所有绘图都基于这个模板叠加图层:
# 定义基础模板 base_ggplot <- ggplot() + theme_grey() + # 你想用的主题 scale_color_colorblind() + # 色盲友好颜色比例尺 scale_fill_colorblind() # 对应填充比例尺 # 后续绘图直接复用模板 base_ggplot + aes(x = wt, y = mpg, color = factor(cyl)) + geom_point(size = 3)
补充说明
你之前尝试的theme_set(theme_grey() + "colorblind_function")之所以无效,核心原因是theme_set()只接受theme对象作为参数,而颜色比例尺是独立的图层组件,负责把数据映射到颜色,不属于主题控制的范围。所以得用上面两种方法来全局配置配色。
另外,你提到的show_col()函数是个很好的工具,可以快速预览配色效果,确认你选的色盲友好配色符合需求~
内容的提问来源于stack exchange,提问作者Edward Deane
相关产品推荐
相关产品推荐

