- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个网络二分图。这是代码:
G = nx.Graph()
G.add_nodes_from(USsNames, bipartite=0) # Add the node attribute "bipartite"
G.add_nodes_from(TCsNames, bipartite=1)
G.add_weighted_edges_from(compoundArr)
labeldict = {}
# Separate by group
pos = {}
# Update position for node from each group
pos.update({node: [1, index] for index, node in enumerate(USsNames)})
pos.update({node: [2, index] for index, node in enumerate(TCsNames)})
nx.draw(G, pos, node_size=10,with_labels=False)
for p in pos: # raise text positions
pos[p][1] += 0.12
# create the dictionary with the formatted labels
edge_labels = {i[0:2]:'{0:.2f}'.format(i[2]['weight']) for i in G.edges(data=True)}
# add the custom egde labels
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels,font_size=8)
nx.draw_networkx_labels(G, pos,font_size=8)
plt.show()
我需要展开左侧节点以便它们向上展开,并缩短右侧节点标签(比方说前四个字符)。
我试图找到解决方案,但没有成功。谢谢。
最佳答案
我根据生成的示例数据重建了您的案例。
首先我们有这张图。
左数组的大小远小于右数组的大小,所以左数组是不按比例绘制的。要正确绘制它,您应该修改位置更新函数:
pos.update({node: [1, index] for index, node in enumerate(USsNames)})
我们知道 TCsNames
比 USsNames
大,所以我们可以将每个 USsNames
节点的 Y 位置乘以它们的比率:
pos.update({node: [1, index*(len(TCsNames)/len(USsNames))] for index, node in enumerate(USsNames)})
现在我们有这张图:
要裁剪节点标签,您应该使用 labels
参数修改您的 draw_networkx_labels
:
nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=8)
node_labels
等于:
node_labels = {i: i[:5] for i in G.nodes}
(5 是所需的节点标签长度)。
最后我们有了您需要的图表:
关于python - Networkx 传播节点和短缺标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52982974/
有什么方法可以在 javascript 中编写更短的 (num>0)?num:0 吗? 原因是 num 变量还没有定义,在上面的例子中需要计算两次。 换句话说,a和b是已知的。我想写 (a>b)?(a
我是一名优秀的程序员,十分优秀!