在networkx中更改箭头类型

时间:2017-11-09 23:58:36

标签: python draw networkx

我正在使用python中的networkx绘制有向图。然而,我发现边缘的箭头从一端而不是尖箭头是厚的。我想将粗边更改为尖箭头。这是我的代码,实际输出和所需的输出:

def init_boxcox() -> Tuple[Callable, Callable]:
    from scipy.special import inv_boxcox as inverse
    from scipy.stats import boxcox as forward
    lambdas = dict()

    def myforward(data: pd.Series):
        transformed, lambdas[data.name] = forward(1 + data)
        if lambdas[data.name]<0:
            lambdas[data.name]=0
        transformed=np.log1p(data)
        return transformed

    def myinverse(data: pd.Series):
        if lambdas[data.name]==0:
            return np.expm1(data)
        else:
            transformed = inverse(data, lambdas[data.name])-1
        return transformed

    return myforward, myinverse

输出 enter image description here

期望的输出: enter image description here

任何建议都会有所帮助吗?

3 个答案:

答案 0 :(得分:4)

这可能是一个较晚的答案,但是在新版本的networkx 2.1中,您可以使用 arrowstyle arrowsize 参数设置箭头类型。

import networkx as nx
import matplotlib.pyplot as plt

G=nx.DiGraph()

item = [1,2]

G.add_edge(*item) #color = item[-1], weight = 2)

pos = nx.circular_layout(G)    
nx.draw(G, pos, with_labels = True, edge_color = 'b', arrowsize=20, arrowstyle='fancy')   
plt.show()

您可以转到文档以获取详细信息:https://networkx.github.io/documentation/stable/reference/generated/networkx.drawing.nx_pylab.draw_networkx_edges.html#networkx.drawing.nx_pylab.draw_networkx_edges

答案 1 :(得分:3)

好消息。现在可以使用networkx的开发版本(将是networkx-2.1)。您的代码现在现在绘制箭头

In [5]: import networkx as nx
   ...: import matplotlib.pyplot as plt
   ...: 
   ...: G=nx.DiGraph()
   ...: 
   ...: item = [1,2]
   ...: 
   ...: G.add_edge(*item) #color = item[-1], weight = 2)
   ...: 
   ...: pos = nx.circular_layout(G)    
   ...: nx.draw(G, pos, with_labels = True, edge_color = 'b')   
   ...: plt.show()
   ...: 

enter image description here

答案 2 :(得分:2)

目前nx.draw无法做到这一点。根据{{​​3}},它尚未实施。

但是,您可以尝试使用graphviz绘制图表。 Networkx有一个界面,可以轻松地将图形转换为graphviz对象。请参阅https://github.com/networkx/networkx/blob/master/networkx/drawing/nx_pylab.py#L584