我有一个adjacency matrix A和一个定义每个节点坐标的数组:
results = Work.search(
'example', :ranker => "expr('sum((4*lcs+2*(min_hit_pos==1)+exact_hit)*user_weight)*1000+bm25*20')",
:select => 'min(weight()) as min_weight, max(weight()) as max_weight'),
:middleware => ThinkingSphinx::Middlewares::RAW_ONLY
我的目标是绘制图表,显示节点之间的连接方式。因此,每条边应该有一个箭头或双向箭头,显示沿着它前进的方向。
我能够显示连接,但即使我将参数指定为import numpy as np
import matplotlib.pyplot as plt
import networkx as nx
%matplotlib inline
Import adjacency matrix A[i,j]
A = np.matrix([[0, 1, 1, 0, 0, 1, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0]])
## Import node coordinates
xy = np.array([[0, 0],
[-20, 20],
[17, 27],
[-6, 49],
[15, 65],
[-20, 76],
[5, 100]])
,也没有箭头。
True
您能否建议我在不修改输入数据(## Draw newtwork
G = nx.from_numpy_matrix(A, xy)
nx.draw_networkx(G, pos=xy, width=3, arrows=True)
和A
)的情况下实现目标的方法?
答案 0 :(得分:4)
在某些时候,我对网络绘图设施缺乏正确的箭头支持感到非常恼火,并编写了我自己的箭头支持,同时保持API几乎相同。可以找到代码here。
import numpy as np
import netgraph
A = np.matrix([[0, 1, 1, 0, 0, 1, 0],
[0, 0, 1, 1, 0, 0, 0],
[0, 0, 0, 1, 1, 1, 0],
[0, 0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 0]])
xy = np.array([[0, 0],
[-20, 20],
[17, 27],
[-6, 49],
[15, 65],
[-20, 76],
[5, 100]])
N = len(A)
node_labels = dict(zip(range(N), range(N)))
netgraph.draw(np.array(A), xy / np.float(np.max(xy)), node_labels=node_labels)
答案 1 :(得分:3)