几年前,ggtree 的六角贴(hex sticker)带起了一阵风潮。随后 hexSticker 包的发布,让 R 语言开发者能用纯代码画出自己的六角贴。

2018 年 useR 会议上的那面“贴纸墙”,这小小的六角形已经成了 R 社区的一种文化。

👉 一大波贴纸来袭 👉 2018年useR会议的一道风景线

当时我们说:“就是这么简单,你也能够纯代码生成六角贴!”

现在,有了生成式 AI,我们可以换个玩法。

纯代码绘图的局限

ggplot2lattice 画贴纸,适合展示数据的硬核美。但如果想要更具艺术感、或复杂的插画风格,纯代码实现起来成本很高。

比如,我想为 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 包制作出高质量的六角贴。


参考资料

  1. ggtree hex sticker
  2. 一大波贴纸来袭
  3. 2018年useR会议的一道风景线