在生物学中,绘制如下图所示的图表来显示基因之间的调控相互作用是很常见的:
您可以看到,这本质上是一个图表,包含 3 个关键元素:
- 节点,可以是基因名称(例如
lin-1
)或事件(vulval fates
)。 - 正(激活)边缘,以箭头(通常为绿色)表示,表示一个基因诱导另一个基因。
- 负(抑制)边缘,以粗短的线(通常为红色)表示,表明一个基因抑制另一个基因。
有时,可能需要将边画得非常长或弯曲(当两个基因相距较远时)。有时,可以使用点线或虚线来显示假定或提议的关系。
箭头有时可能指向其他箭头例如,当基因 A 增强基因 B 激活基因 C 的能力时。一个稍微不那么简单的例子:
以上是我想要做的最基本的事情。显然,图表的布局是完全不同的难题,但现在我们先忽略这一点,假设用户将手动布局节点。
额外积分
可以将这些图表做得更复杂,以强调调控方式的细微差别(转录、翻译后、定位、直接与间接等)。以下是展示拟议的象征性词汇从科恩 2006. 这是另一个建议词汇从皮尔森2000和示例用法
答案1
这是一个元帖子方法与第一个图表类似。鉴于 MP 的通用性,您可以想出方法轻松扩展它。
prologues := 3;
outputtemplate := "%j%c.eps";
input boxes;
vardef draw_inhibition(suffix $, $$) =
interim ahangle := 180; % to get T-shaped arrows
interim linecap := butt; % squared ends
interim linejoin := mitered;
drawarrow $.c -- $$.c cutbefore bpath $ cutafter bpath $$
withpen pencircle scaled 2bp
withcolor .67 red;
enddef;
vardef draw_activation(suffix $, $$) =
interim linecap := butt;
interim linejoin := mitered;
drawarrow $.c -- $$.c cutbefore bpath $ cutafter bpath $$
withpen pencircle scaled 2bp
withcolor .59 green;
enddef;
beginfig(1);
defaultdx := 5; % add some extra space around the names
defaultfont := "phvbo8r"; % bold oblique
boxit.ln01("lin-1");
boxit.ln03("lin-3");
boxit.ln15("lin-15");
boxit.ln45("lin-45");
boxit.lt23("let-23");
boxit.lt60("let-60");
defaultfont := "phvb8r"; % bold
boxit.event("vulval fates");
u = 6mm;
ln03.c = ln15.c + (0,2u);
lt23.c = ln15.c + (3u,u);
lt60.c = lt23.c + (3u,0);
ln45.c = lt60.c + (3u,0);
ln01.c = ln45.c + (3u,0);
event.c = ln01.c + (4u,0);
drawunboxed(ln15,ln03,lt23,lt60,ln45,ln01);
draw pic event withcolor .49 blue; % draw this one in blue
draw_inhibition(ln15, lt23);
draw_activation(ln03, lt23);
draw_activation(lt23, lt60);
draw_activation(lt60, ln45);
draw_inhibition(ln45, ln01);
draw_inhibition(ln01, event);
endfig;
end.
更新:此版本对粗箭头的处理稍微合理一些,并使用了与 OP 图表相同的斜字体。