【发布时间】:2010-12-06 13:27:53
【问题描述】:
我已经构建了一个树形图像,请参阅 question。
现在我有一些主要群体。
一组具有绿色和棕色的节点,并具有“B”和“A”。第二组只有粉色节点和“T”,最后一组有黄色、橙色和蓝色,以及字母“L”、“X”和“H”。颜色是指节点的颜色,字母属于名称。所以我想为不同组的边缘着色。
#taken from draw_graphviz
def get_label_mapping(G, selection):
for node in G.nodes():
if (selection is None) or (node in selection):
try:
label = str(node)
if label not in (None, node.__class__.__name__):
yield (node, label)
except (LookupError, AttributeError, ValueError):
pass
labels = dict(get_label_mapping(G, None))
for label in labels.keys():
if str(label) != "Clade":
num = label.name.split('-')
if 'T' in num[0]:
node_colors.append('#CC6699')
elif 'X' in num[0]:
node_colors.append('r')
else:
node_colors.append('y')
所以我做了与上面类似的功能,而不是node,我改为get_edge。 试试这个:
for edge in edges.keys():
if str(edge) != "Clade":
if 'T' in edge:
edge_colors.append('b')
边缘在哪里:
(Clade(branch_length=-0.00193, name='T-7199-8'), Clade(branch_length=0.00494))
也许有一种方法可以判断 T 是否名副其实,然后为边缘着色。 你觉得呢?
有人知道怎么做吗?
谢谢
【问题讨论】:
-
当您说“如果名称中有 T,则为边缘着色”,您是指 边缘的名称,还是节点的名称(或两个节点)都发生在边缘?另外,你能显示完整的for循环吗?如果我们能确切地看到您正在迭代的内容,就会更容易为您提供帮助。
-
T 在节点的名称中,所以我虽然做了类似的事情:如果 T 在节点中,则为边缘着色。循环在另一个问题中,但我更新了我的问题并提供了更多代码:)
-
使用 node_colors 我正在更改节点的颜色,例如,如果所有节点都具有红色、边缘为蓝色或类似的颜色,我想要什么。希望我让自己足够清楚
-
感谢您澄清“姓名”的问题。您现在能否明确说明为边缘着色的条件?例如,只要 任一 个节点的名称以“T”开头,或者只有 两者 都以“T”开头,您是否将边缘着色为蓝色?如果一个节点的名称以“T”开头,而另一个节点的名称以“X”开头,会发生什么情况:你将它涂成蓝色、红色还是两者都不涂?请明确点。尝试考虑特殊情况。
-
我更新了我的问题,对颜色和名称做了一个小小的解释。颜色代表不同的簇,所以它们不应该混合