几年前,ggtree 的六角贴(hex sticker)带起了一阵风潮。随后 hexSticker 包的发布,让 R 语言开发者能用纯代码画出自己的六角贴。
2018 年 useR 会议上的那面“贴纸墙”,这小小的六角形已经成了 R 社区的一种文化。
当时我们说:“就是这么简单,你也能够纯代码生成六角贴!”
现在,有了生成式 AI,我们可以换个玩法。
纯代码绘图的局限
用 ggplot2 或 lattice 画贴纸,适合展示数据的硬核美。但如果想要更具艺术感、或复杂的插画风格,纯代码实现起来成本很高。
比如,我想为 clusterProfiler 设计一个新的 Logo,希望能展现“基因网络从 DNA 中涌现”的意象,并且要有 4K 级的高级质感。
以前这需要找专业设计师,现在可以用 AI 生成素材,再用 R 进行封装。
新思路:AI 生图 + hexSticker
hexSticker 的设计初衷就考虑了兼容性——它不仅支持 R 的绘图对象,也支持图片文件。
因此,我们可以把流程拆解为:AI 负责出图,R 负责标准封装。
以 clusterProfiler 的新贴纸为例:
第一步:AI 创作
使用 AI 绘图工具(如 Midjourney、DALL-E、Nano-Banana等),通过 Prompt 生成底图。
我用了以下提示词:
A sophisticated scientific illustration representing gene cluster analysis, featuring interconnected network nodes in varying sizes and colors (blue, red, green) representing biological pathways, emerging from a stylized DNA strand…
AI 生成了底图(icon.png)。
第二步:图像处理
AI 生成的图通常是矩形的,且带有背景。需要处理成适合六角形的透明素材。
使用 R 的 magick 包处理:
library(magick)
# 读取 AI 生成的图片
icon_path <- "icon.png"
processed_path <- "icon_processed.png"
# 去除白色背景,fuzz 参数处理边缘杂色
img <- image_read(icon_path)
img_trans <- image_transparent(img, "white", fuzz = 15)
image_write(img_trans, processed_path)第三步:标准化封装
最后,使用 hexSticker 将处理好的素材放入标准的六角形中,调整文字位置和颜色。
library(hexSticker)
sticker(processed_path,
package="clusterProfiler",
p_size=18, # 包名大小
p_y = 1.4, # 包名位置(偏上)
p_color = "#000000", # 黑色文字
s_x=1, # 图标 X 坐标
s_y=0.75, # 图标 Y 坐标(偏下)
s_width=0.7, # 图标宽度
h_fill="#FFFFFF", # 白色底色
h_color="#336699", # 蓝色边框
filename="clusterProfiler_hex.png")
结语
工具在变,但 hexSticker 连接创意与标准的角色没变。
只要有好的 Prompt,配合 hexSticker,就能快速为 R 包制作出高质量的六角贴。
参考资料