我正在使用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
任何建议都会有所帮助吗?
答案 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()
答案 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()
...:
答案 2 :(得分:2)
目前nx.draw无法做到这一点。根据{{3}},它尚未实施。
但是,您可以尝试使用graphviz绘制图表。 Networkx有一个界面,可以轻松地将图形转换为graphviz对象。请参阅https://github.com/networkx/networkx/blob/master/networkx/drawing/nx_pylab.py#L584。