You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

R中堆叠面积图24+高辨识度美观配色方案咨询

解决R语言堆叠面积图24+高辨识度配色的可行方法

嘿,我太懂你这种需求了——要给堆叠面积图找24种以上、既高辨识度又好看的配色,viridis虽然对色觉障碍友好但数量不够,渐变又完全不适用,之前搜的方案也没戳中痛点。我这儿有几个亲测好用的方法,你可以挨个试试:

方法1:用colorspace包生成高区分度离散配色

colorspace包是生成大量离散配色的神器,它的定性调色板专门为多类别可视化设计,能保证颜色之间的区分度,还能兼顾色觉障碍人群。

library(colorspace)
# 生成30种高区分度的离散颜色,可选不同风格的调色板
# Dynamic风格色彩鲜明,适合堆叠面积图
my_colors <- qualitative_hcl(30, palette = "Dynamic")
# 要是喜欢柔和一点的风格,可以用Pastel1
# my_colors <- qualitative_hcl(30, palette = "Pastel1")
# 预览颜色
scales::show_col(my_colors)

这个方法的优势是可以直接生成50种甚至更多的颜色,而且每个颜色的区分度都经过优化,不会出现“撞色”或者难以分辨的情况。

方法2:组合多个专业调色板(ggsci + RColorBrewer)

很多单调色板的颜色数量有限,但把风格相近的多个调色板组合起来,就能轻松凑够24+的数量,还能保证整体美观度。

library(ggsci)
library(RColorBrewer)
library(scales)

# 从ggsci中取科研风的调色板,每个取10种
pal_npg <- pal_npg()(10)
pal_aaas <- pal_aaas()(10)
pal_jco <- pal_jco()(10)

# 从RColorBrewer中取高区分度的离散调色板
pal_set2 <- brewer.pal(8, "Set2")
pal_pastel1 <- brewer.pal(9, "Pastel1")

# 合并调色板,去重后取前40种(按需调整数量)
combined_colors <- unique(c(pal_npg, pal_aaas, pal_jco, pal_set2, pal_pastel1))
final_colors <- combined_colors[1:40]

# 预览效果
show_col(final_colors)

组合的时候尽量选风格统一的调色板,比如ggsci的几个科研风调色板,和RColorBrewer的Set2、Pastel1搭配,整体不会太突兀,而且每个调色板内部的颜色已经是高区分度的,组合后效果也不错。

方法3:自定义HSV空间生成离散配色

直接在HSV颜色空间生成颜色,通过控制色相的均匀分布,保证颜色之间的区分度,还能自定义饱和度和明度来调整美观度。

# 生成40种颜色,色相从0到360均匀分布
n <- 40
hues <- seq(0, 360, length.out = n + 1)[1:n]
# 调整饱和度(s)和明度(v),数值越低颜色越柔和
my_colors <- hsv(hues / 360, s = 0.7, v = 0.8)

# 预览颜色
scales::show_col(my_colors)

如果需要兼顾色觉障碍,可以把色相范围调整到避开红绿色盲难区分的区间,或者用colorspace包把生成的颜色转换成色觉友好的版本:

my_colors <- desaturate(my_colors, amount = 0.1) # 轻微降饱和,提升色觉友好度

方法4:组合viridis系列调色板(兼顾色觉友好)

虽然单个viridis调色板数量有限,但把不同的viridis系列调色板组合起来,既能保证色觉友好,又能凑够足够的数量。

library(viridisLite)
library(scales)

# 取不同的viridis系列调色板,每个取12种
pal_viridis <- viridis(12)
pal_plasma <- plasma(12)
pal_inferno <- inferno(12)
pal_magma <- magma(12)

# 组合后取前40种
combined_viridis <- c(pal_viridis, pal_plasma, pal_inferno, pal_magma)[1:40]

# 预览效果
show_col(combined_viridis)

这个方法生成的颜色对色觉障碍人群非常友好,而且每个调色板的色彩风格略有差异,组合后区分度也足够。

小提示

不管用哪种方法,生成颜色后一定要用scales::show_col()预览实际效果,要是发现有颜色太接近,直接删掉或者替换掉就行,灵活调整总能找到适合你图表的配色。

内容的提问来源于stack exchange,提问作者Melinda

火山引擎 最新活动