Python Networkx 图形绘制 - labels/values 内部元组

Python Networkx graph draw - labels/values inside tuple

我想用元组 'new' 中的项目绘制单个 networkX 图。 我的图形节点将具有 "AXIN" 等标签,颜色将是绿色或黄色。

如果'UNREPORTED',我希望节点为绿色。 如果元组 'reported' 中的项目 [2],我希望此节点为黄色。

> new = (('AXIN', 37, 'reported'),  ('LGR', 30, 'reported'),  ('NKD',
> 24, 'reported'),  ('TNFRSF', 23, 'UNREPORTED'),  ('CCND', 19,
> 'reported'),  ('APCDD', 18, 'reported'),  ('TR', 16, 'UNREPORTED'), 
> ('TOX', 15, 'UNREPORTED'),   ('LEF', 15, 'reported'),  ('MME', 13,
> 'reported'))
> 
> X, Y, _ = zip(*new) import seaborn as sns sns.set() import
> matplotlib.pyplot as plt  %matplotlib inline plt.figure(figsize = (20,
> 10)) mytitle = "Most common genes coexpressed with {gene1}, {gene2},
> {gene3}, {gene4}".format(gene1="axin2", gene2="lef", gene3="nkd1",
> gene4="lgr5") plt.title(mytitle, fontsize=40) plt.ylabel('Number of
> same gene encounters across studies', fontsize=20) ax =
> plt.bar(range(len(X)), Y, 0.6, align='center', tick_label = X,
> color="red")  ax = plt.xticks(rotation=90) new = tuple(new)
> 
> import networkx as nx children = sorted(new, key=lambda x: x[1])
> parent = children.pop()[0]
> 
> G = nx.Graph() for child, weight, _ in children: G.add_edge(parent,
> child, weight=weight) width = list(nx.get_edge_attributes(G,
> 'weight').values()) colors = [] for i in new:
>         if i[2] == 'UNREPORTED':
>                 colors.append('green')
>         elif i[2] == 'reported':
>                 colors.append('yellow') print(colors) plt.savefig("plt.gene-expression.pdf") plt.figure(figsize = (20, 10))
> mytitle = "Most common genes coexpressed with {gene1}, {gene2},
> {gene3}, {gene4}".format(gene1="axin2", gene2="lef", gene3="nkd1",
> gene4="lgr5") plt.title(mytitle, fontsize=40)
> 
> nx.draw_networkx(G, font_size=10, node_size=2000, alpha=0.6,
> node_color=colors) plt.savefig("gene-expression-graph.pdf")

使用这段代码,我得到了两个不同的图表,一个是黄色节点,一个是绿色节点。

您可以使用字典理解和三元运算符来构建节点到颜色的映射。这可用于在绘制图形时为节点着色。

import networkx as nx

new = (('AXIN', 37, 'reported'),  ('LGR', 30, 'reported'),  ('NKD', 24, 'reported'),  ('TNFRSF', 23, 'UNREPORTED'),  ('CCND', 19, 'reported'),  ('APCDD', 18, 'reported'),  ('TR', 16, 'UNREPORTED'), ('TOX', 15, 'UNREPORTED'),   ('LEF', 15, 'reported'),  ('MME', 13, 'reported'))
children = sorted(new, key=lambda x: x[1])
node_color = {node[0]: 'y' if node[2] == 'reported' else 'g' for node in children}
parent = children.pop()[0]
G = nx.Graph()
for child in children: G.add_edge(parent, child[0])
nx.draw_networkx(G, node_color=[node_color[i] for i in G.nodes()])