Code
#------------------------------------------------------------r20250226064947
# install.packages("munsell")
library(munsell)
2025-02-24 耽搁了太多,还是继续更新测试
在研究ggplot2的layer时看到了一个新的的颜色系统关于颜色,我可以说真的是一个色盲吗?关 于颜色的基本概念其实是毫无兴趣去了解,但是当看到这里的时候却想去真正的理解,这三个概念到底所表达的是什么意思?大 概这就是缘分吧。
手册链接; cran url; Github URL url
Warning: Removed 25 rows containing missing values or values outside the scale range
(`geom_text()`).
Warning: Removed 33 rows containing missing values or values outside the scale range
(`geom_text()`).
孟塞尔颜色系统(Munsell Color System)通过三个维度精确描述颜色:色相(Hue)、明度(Value)、色度(Chroma)。以 颜色代码 5PB 5/10
为例,以下是其含义和如何用它描述你需要的颜色:
5PB 5/10
的含义5PB
字母部分:PB
是 Purplish Blue(带紫色的蓝) 的缩写,表示色相环上的主色调。孟 塞尔系统将色相分为 10 种基础色,例如:
数字部分:5
表示在 PB
色相区间内的细分位置,范围是 0 到 10。例 如:
0PB
接近相邻色相(如 B
或 P
),而 10PB
会与下一个色相(如 P
)循环衔接。5
明度表示颜色的 亮度,范围是 0(纯黑)到 10(纯白)。
5
代表中等明度,类似于中性灰的亮度。
例如:3
是深灰色,7
是浅灰色。
10
色度表示颜色的 饱和度或纯度,范围从 0(完全中性灰)到理论上的无限大(实际受显示设备限制)。
10
代表较高的饱和度,颜色鲜艳;2
则接近灰色。
常见颜色的色度范围:自然色(如肤色)通常在 1-6,荧光色可达 12+。
观察主色调:判断颜色属于哪个基础色相(如蓝、红、绿等)。
细化位置:若颜色介于两种基础色之间,用数字进一步调整(如 5PB
比 2.5PB
更接近紫色)。
亮度需求:
深色(如墨蓝):明度 3
以下。
中等亮度(如天空蓝):明度 5
左右。
浅色(如浅粉):明度 7
以上。
饱和度需求:
柔和色(莫兰迪色系):色度 1-4
。
鲜艳色(广告色):色度 8+
。
自然色(如树叶绿):色度 4-8
。
色相:绿色(G)带蓝调 → 选择 5G
(主色绿)或 2.5BG
(蓝绿色)。
明度:浅色 → 设定为 7
。
色度:柔和 → 设定为 4
。
5G 7/4
或 2.5BG 7/4
。munsell
包验证颜色R
`library(munsell)
mnsl(“5PB 5/10”) # 正常显示颜色 mnsl(“5PB 2/20”) # 可能因色度过高报错,需用 fix_mnsl() 自动修正
fixed_color <- fix_mnsl(“5PB 2/20”) cat(“修正后的颜色代码:”, fixed_color, “”) # 输出 “5PB 2/12”`
色域限制:并非所有理论颜色都能在屏幕/印刷中显示,高色度颜色可能需要修正。
格式统一:代码需严格遵循 H V/C
格式(如 5PB 5/10
,不可写作 5PB5/10
)。
应用场景:
设计领域:用于品牌色标准化(如 Pantone 色卡)。
科学研究:土壤分类、植物学中的颜色记录。
通过练习,你可以快速用孟塞尔系统精准描述颜色需求,减少沟通误差。
colors()
/ colours()
功能:返回 R 内置颜色名称列表(657 种)。
参数:distinct = TRUE
去重后返回 502 种。
错误示例:colors("springgreen")
❌(参数需为逻辑值 TRUE/FALSE
)。
正确用法:"springgreen" %in% colors()
✅ 验证颜色是否存在。
颜色转换工具:
col2rgb("red")
:转为 RGB 值。
rgb(1, 0, 0)
:生成十六进制颜色代码。
colorRampPalette(c("red", "blue"))(10)
:生成渐变色。
munsell
包颜色代码格式:H V/C
(如 5PB 5/10
)。
色相(Hue):PB
(Purplish Blue),范围 0-10
,通常以 2.5
为间隔(如 2.5PB
)。
明度(Value):0
(黑)到 10
(白)。
色度(Chroma):0
(灰)到理论无限大(实际受设备限制)。
核心函数:
mnsl("5PB 5/10")
:生成颜色,需符合标准间隔(如 5PB
有效,0PB
无效)。
fix_mnsl("0PB 2/20")
:自动修正无效代码(如转为 2.5PB 2/12
)。
mnsl2hex("5PB 5/10")
:转为十六进制颜色码(如 #3E6EA6
)。
与 ggplot2
结合:
R
ggplot(mtcars, aes(wt, mpg, color = factor(cyl))) + geom_point() + scale_color_manual(values = mnsl(c("5R 5/8", "5Y 5/8", "5G 5/8")))
mnsl()
报错:
原因:色相值非标准间隔(如 0PB
或 9PB
)。
解决:使用 2.5
的倍数(如 2.5PB
)或 fix_mnsl()
自动修正。
色域限制:高色度值可能超出显示范围,需修正为有效值。
RColorBrewer
:预定义调色板(如 "Set1"
)。
colorspace
:颜色空间转换与高级分析。
官方文档:
munsell
:vignette("munsell")
。
科学配色:用孟塞尔代码确保颜色一致性(如论文、品牌设计)。
自动化修正:优先使用 fix_mnsl()
避免手动试错。
可视化检查:hue_slice("5PB")
查看色相切片,辅助理解色域。
掌握这些工具,你可以更高效地在 R 中实现精准颜色控制! 🎨