net.py 文件源码

python
阅读 28 收藏 0 点赞 0 评论 0

项目:habran 作者: mkotov 项目源码 文件源码
def draw(G, karmas):
    def get_root(G):
        for x in G.nodes():
            if len(G.predecessors(x)) == 0:
                return x
        return None

    def gen_node_size(karma):
        if karma == "RO" or karma == "DA":
            return 1
        else:
            return max(1, math.sqrt(abs(float(karma))))

    def gen_node_sizes(karmas, nodes):
        return [20 * gen_node_size(karmas[n]) for n in nodes]

    def gen_node_color(karma):
        if karma == "RO":
            return "darkgray"
        elif karma == "DA":
            return "darkgray"
        elif float(karma) > 0:
            return "green"
        elif float(karma) < 0:
            return "red"
        else:
            return "blue"

    def gen_node_colors(karmas, nodes):
        return [gen_node_color(karmas[n]) for n in nodes]

    def gen_node_labels(karmas, G):
        ranks = []
        root = get_root(G)
        for n in G.nodes():
            r = len(G.successors(n)) * 10
            if karmas[n] != "RO" and karmas[n] != "DA":
             r += abs(float(karmas[n]))
            if n == root:
                r += 1000
            ranks.append([n, r])
        return dict((p[0], p[0]) for p in sorted(ranks, key=lambda p: p[1], reverse=True)[0:MAX_NUM_OF_LABELS])

    nx.draw(G, 
            nx.graphviz_layout(G, prog="neato", root=get_root(G)), 
            node_size=gen_node_sizes(karmas, G.nodes()), 
            node_color=gen_node_colors(karmas, G.nodes()), 
            arrows=True, 
            labels=gen_node_labels(karmas, G), 
            with_labels=True, 
            font_size="10", 
            edge_color="lightgrey", 
            linewidths=0)
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号