美文网首页
graphviz 简单使用记录

graphviz 简单使用记录

作者: crosstrack | 来源:发表于2018-05-21 22:00 被阅读50次

api 文档:http://graphviz.readthedocs.io/en/stable/api.html#graph
最近在聚宽做每天收盘分析时,想做一个涨停传导路径,偶然了解到graphviz库,记录一下使用过程中的用法:

from graphviz import Digraph

dot = Digraph(comment='The Round Table')
#dot.attr('graph',rankdir='LR') #这个是关键,否则输出的是上下的
#添加圆点 A, A的标签是 King Arthur
dot.node('A', 'King Arthur')

#添加圆点 B, B的标签是 Sir Bedevere the Wise
dot.node('B', 'Sir Bedevere the Wise')

#添加圆点 L, L的标签是 Sir Lancelot the Brave
dot.node('L', 'Sir Lancelot the Brave')

dot.node('E', 'King Arthur')

#创建一堆边,即连接AB的边,连接AL的边。
dot.edges(['AB', 'BL','LE'])

输出如下图:


屏幕快照 2018-05-21 下午9.51.06.png

下面是我在聚宽中的代码:

from graphviz import Digraph


def plot_sparse_network(dot,data,key):
    data = data.sort(columns = ['连板','时间'],axis = 0,ascending = [False,True])
    lb_cnts = array(data.loc[:,'连板'])
    lb_cnts_exdump = []
    parent_node = None
    for i in lb_cnts:
        if i not in lb_cnts_exdump:
            lb_cnts_exdump.append(i)
    #从大到小排序,获得连板之王
    lb_cnts_exdump.sort(reverse = True)
    for i in range(len(lb_cnts_exdump)):
        cnt = lb_cnts_exdump[i]
        level_df = data[data['连板'] == cnt]
        indexes = array(level_df.index)
        for j in range(len(indexes)):
            node_name = level_df.ix[j,'名称']
            node_description = level_df.ix[j,'名称']
            if j == 0:
                node_description += str(cnt) 
            dot.node(node_name, node_description)
            if parent_node:
                dot.edge(parent_node,node_name,key)
            if j == len(indexes)-1 :
                #作为下一层的父节点
                parent_node = level_df.ix[0,'名称']

dot = Digraph(comment='The Round Table')
dot.attr('graph',rankdir='LR')

最后的输出是


521.png

是不是还不错。
最关键的是

dot.attr('graph',rankdir='LR')

文档中:

attr(kw=None, _attributes=None, **attrs)
Add a general or graph/node/edge attribute statement.

  • kw – Attributes target (None or 'graph', 'node', 'edge').
  • attrs – Attributes to be set (must be strings, may be empty).

第一个参数graph的话就是针对布局进行设置,node就是针对节点设置。
第二个就是朝向选择了

当初就是没加这句使得生存的图很扁!!

相关文章

网友评论

      本文标题:graphviz 简单使用记录

      本文链接:https://www.haomeiwen.com/subject/koxcjftx.html