Nat Commun | 一张哑铃图看懂 AFP 阴性肝癌的转录因子线索
生信文章解读 002
如果你只会画火山图和热图,很容易错过一种更“会讲故事”的图:同一个转录因子,在两个分子信号之间到底是同向,还是反向?

一句话亮点:这张图不是为了证明“某个 TF 显著”,而是把同一批转录因子同时放到 AFP expression 和 CYP gene signature 两个坐标里,观察它们是否呈现相反的分子方向。对 AFP-negative HCC 来说,这比单独看一个 marker 更有解释力。
先把钩子抛出来
AFP 阴性肝癌有一个很现实的问题:传统 AFP 标志物不高,不代表肿瘤就“不活跃”。有些患者可能并不沿着 AFP 这条轴走,而是被代谢、血管生成、脂肪酸和花生四烯酸相关程序推着往前走。
所以问题来了:
当 AFP 这条线索变弱,我们还能不能找到另一组分子状态?
这篇 Nature Communications 文章里,Fig.3b 用一个很小巧但信息量很高的哑铃图,回答了这个问题的一部分:它比较了转录因子活性与 AFP expression、CYP genes expression signature 的相关性。
论文与图形信息
- 期刊:Nature Communications
- 文章:Androgen receptor promotes arachidonic acid metabolism and angiogenic microenvironment in AFP-negative hepatocellular carcinoma
- 主题:AFP-negative HCC 中 AR 相关代谢与血管生成微环境
- 复现图:Fig.3b 风格哑铃图
- 图形对象:转录因子活性相关性
这张图到底怎么看?
每一行是一个转录因子。
横轴是 correlation coefficient,越靠右代表正相关越强,越靠左代表负相关越强,中间虚线是 0。
蓝色点表示这个 TF activity 与 AFP expression 的相关性。
玫红色点表示这个 TF activity 与 CYP gene expression signature 的相关性。
灰色连接线把同一个 TF 的两个点连起来。线越长,说明这个 TF 对两个分子信号的方向差异越明显。
实心点代表显著,空心点代表不显著。
这张图为什么适合讲 AFP-negative HCC?
AFP-negative HCC 的关键不是“没有 AFP 就没有信号”,而是要找到 AFP 之外的另一套分子程序。
如果一个 TF 对 AFP expression 是负相关,但对 CYP gene signature 是正相关,这就提示它可能更靠近 AFP-negative HCC 的代谢状态,而不是传统 AFP 高表达状态。
文章中提到的 AR、TEF、KLF15 等 TF 就呈现出类似的方向差异:蓝色点偏左,玫红色点偏右。这个模式很适合用来引出后续的 AR、花生四烯酸代谢和血管生成微环境解释。
云平台复现视频
我们已经把这张图从“公众号教学代码”整理成了一个可复现包:有目录结构、demo 数据、R 脚本、conda 环境和结果图,并录制了紧凑版教学视频。
视频直链:
我们在云平台里做了什么?
这次复现不是只把代码复制出来,而是按可复现分析项目的标准整理:
my-rawdata/ 原始文章内容和真实原始数据
my-data/ 真实数据清洗后的分析表
demo-rawdata/ demo 原始输入表
demo-data/ demo 整理后的长表
scripts/ 可运行 R/Python 脚本
results/ PNG、PDF、教学视频等输出
readme/ 文章整理说明和运行说明
conda-env/ conda 环境文件和 lock 文件这套结构的好处很直接:学生不是“看完一段代码”,而是能知道真实项目里每个文件该放在哪里,脚本怎么接输入,结果怎么检查,别人拿到后怎么复跑。
输入数据长什么样?
文章没有公开原始相关性数据,因此我们构造了一个教学 demo 表,字段和文章逻辑一致:
TF AFP_corr AFP_sig CYP_corr CYP_sig
AR -0.62 p < 0.05 0.74 p < 0.05
TEF -0.50 p < 0.05 0.61 p < 0.05
KLF15 -0.43 p < 0.05 0.58 p < 0.05
HNF4A -0.31 p < 0.05 0.49 p < 0.05
PPARA -0.18 not significant 0.52 p < 0.05真实项目里,只要把自己的结果整理成同样列名,就可以替换 demo 数据。
代码逻辑:哑铃图的三层结构
第一层:连接线。
它回答的问题是:同一个 TF 在两个分子信号之间差了多少。
第二层:两组点。
蓝色点放 AFP expression,玫红色点放 CYP gene signature。
第三层:显著性。
实心表示 p < 0.05,空心表示 not significant。这样一张图同时保留方向、强度和统计显著性。
核心代码可以理解成:
geom_segment(...) # 同一个 TF 的两组相关系数连线
geom_vline(...) # 0 参考线
geom_point(...) # AFP 与 CYP 两组相关点
geom_text(...) # 标注相关系数为什么要把宽表转成长表?
很多同学第一次画这种图会卡在数据结构上。
原始表通常是宽表:一行一个 TF,AFP 和 CYP 的相关系数分列存放。
但 ggplot 更喜欢长表:一行对应图上的一个点。
所以我们在脚本里把:
TF | AFP_corr | CYP_corr整理成:
TF | Correlation | coefficient这一步做完,颜色、填充、标签和图例都会变得很自然。
图形美化:让结果像一张能讲课的生信图
原始复现图能跑出来是一回事,能不能给学生讲清楚是另一回事。
我们在美化版里做了这些处理:
- 交替行背景,减少横向读错行。
- 0 参考线加深,让正负相关一眼分开。
- 数值标签移到点外侧,不压住圆点。
- 蓝色和玫红色降低饱和度,更适合报告和网页展示。
- 图注写明实心/空心点含义,避免读者误解。
- 同时输出 PNG 和 PDF,方便网页展示和后期编辑。
生信解读:这类图还能用在哪里?
这张图的通用价值很高。
只要你想比较“同一批对象”与“两类表型或 signature”的相关方向,都可以用类似哑铃图。
例如:
- TF activity vs 治疗敏感、耐药 signature
- pathway score vs 增殖、免疫浸润
- 细胞亚群比例 vs 炎症评分、纤维化评分
- 基因模块分数 vs 预后风险、药物反应
- scRNA cluster marker vs 两类临床分型
它最适合回答的问题是:同一个对象,在两个生物学信号之间,是同向变化,还是相反变化?
云平台复现价值
这类图看起来只有几十行 R 代码,但真正教学时,学生需要学到的不只是 geom_point()。
更重要的是:
- 如何从文章里拆出数据结构;
- 如何用 demo 数据替代缺失的真实数据;
- 如何把硬编码路径改成项目相对路径;
- 如何用 conda 固化运行环境;
- 如何把结果图、作图数据和说明文档一起交付;
- 如何把一次复现变成别人也能跑的教学包。
这也是云平台适合做生信教学的地方:环境、脚本、数据和结果都在同一个空间里,学生不用先在本地折腾半天依赖,能把注意力放回分析逻辑本身。
想复现真实数据?
这篇文章的原始相关性结果没有直接公开,所以我们提供的是教学 demo 数据,用来复现图形逻辑和项目结构。
如果你想拿到复现数据、想把自己的 TF 活性结果整理成同款图,或者想在云平台上跟着跑一遍,可以加客服微信:
客服微信:15259811736
备注:TF哑铃图复现 / 生信文章解读002
一句话收束
这张哑铃图真正值得学的,不是颜色怎么调,而是它把“同一批 TF 在两个分子状态之间的方向差异”讲清楚了。对 AFP-negative HCC 这类 marker 不典型的场景来说,这种图往往比单一热图更会讲故事。
云平台入口
服务器地址:https://vip.r-py.com/
公开视频:TF 哑铃图复现教学视频