单细胞总是缺少合适的颜色组合。太浅了、太深了不好区分,太浓艳了看着扎眼。除了直接照搬别人sci中的优秀配色外,大自然鬼斧神工的照片也提供了很好的配色灵感,如果能自动化提取出关键颜色,做成大色块展示效果,供我们挑选,那就好极了,本文尝试给出R语言实现。
1. 颜色卡代码效果
(1).从大自然照片中获取颜色灵感
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-49.jpg")
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-46.jpg", k=10)
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-56.jpg", k=8)
(1B) 3d展示 kmeans 颜色聚类效果
# test 3d
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8)
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="none")
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="3d")
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="3d", angle.3d=80)
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="3dR", angle.3d=80)
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="3di")
getColorsFromPicture("D:\\Program Files (x86)\\EyeDefender\\scenery-30.jpg", k=8, show="3diR")
show参数:
- 3d开头的是3d效果,
- 带i的是交互式的,可鼠标拖动
- 带R的展示的是真实色彩,否则展示的是kmeans聚类的代表色
(2). 从手绘示意图中获取颜色灵感
getColorsFromPicture("C:\\Users\\DELL\\Pictures\\Biology\\Bone-marrow-stem-cell-differentiation.png", k=30)
输出是按照频率排序的,大块的颜色优先输出。比如第一列是白色。
(3). 从sci图片中获取颜色灵感
getColorsFromPicture("C:\\Users\\DELL\\Pictures\\scRNA-seq\\Heatmap_cluster.png", k=40)
2. 不同颜色的颜色卡
赤橙黄绿蓝靛紫
(1) 赤-红
(2) 橙
(3) 黄
黄和绿之间的部分:黄绿色
(4) 绿
(5) 蓝
(6) 靛-青
(7) 紫
100. 实现思路
-
输入硬盘图片,按像素读取RGB值,做kmeans聚类,给出最代表性的颜色。
-
源代码还在优化中,敬请关注…
Ref
- 从图片提取主要颜色的思路 matlab版:https://slandarer.blog.youkuaiyun.com/article/details/119056214