相关疑难解决方法(0)

如何使用matplotlib或graphviz在networkx中绘制多图

当我将multigraph numpy邻接矩阵传递给networkx(使用from_numpy_matrix函数),然后尝试使用matplotlib绘制图形时,它会忽略多个边缘.

我怎么能让它画出多个边缘呢?

networkx python-2.7

17
推荐指数
2
解决办法
1万
查看次数

Networkx:可视化MultiGraph时重叠边缘

使用graphviz neato正确绘制以下多图(即平行边不重叠)以生成png(如本答案所示)

import networkx as nx
nx.MultiGraph ([(1,2),(1,2),(1,2),(3,1),(3,2)])
nx.write_dot(Gm,'multi.dot')
!neato -T png multi.dot > multi.png
Run Code Online (Sandbox Code Playgroud)

但是,使用Networkx的绘图功能并不能解决问题

nx.draw_graphviz(Gm,prog='neato')
Run Code Online (Sandbox Code Playgroud)

是否可以使用Networkx的draw方法防止重叠边缘?

谢谢

python matplotlib graphviz networkx python-2.7

12
推荐指数
2
解决办法
4689
查看次数

Matplotlib和Networkx-绘制自循环节点

我有这个功能,我想画一个自我循环。我怎样才能做到这一点?
边缘存在,但我认为在这个示例中只有一点(1,1),我无法添加节点的名称。我的目标是从邻接矩阵绘制图形。有没有更好的方法可以做到这一点?

import networkx as nx
import matplotlib.pyplot as plt
from matplotlib.patches import FancyArrowPatch, Circle
import numpy as np

def draw_network(G,pos,ax,sg=None):

    for n in G:
        c=Circle(pos[n],radius=0.05,alpha=0.7)
        ax.add_patch(c)
        G.node[n]['patch']=c
        x,y=pos[n]
    seen={}
    for (u,v,d) in G.edges(data=True):
        n1=G.node[u]['patch']
        n2=G.node[v]['patch']
        rad=0.1
        if (u,v) in seen:
            rad=seen.get((u,v))
            rad=(rad+np.sign(rad)*0.1)*-1
        alpha=0.5
        color='k'

        e = FancyArrowPatch(n1.center,n2.center,patchA=n1,patchB=n2,
                            arrowstyle='-|>',
                            connectionstyle='arc3,rad=%s'%rad,
                            mutation_scale=10.0,
                            lw=2,
                            alpha=alpha,
                            color=color)
        seen[(u,v)]=rad
        ax.add_patch(e)
    return e


G=nx.MultiDiGraph([(1,2),(1,1),(1,2),(2,3),(3,4),(2,4),
                (1,2),(1,2),(1,2),(2,3),(3,4),(2,4)]
                )

pos=nx.spring_layout(G)
ax=plt.gca()
draw_network(G,pos,ax)
ax.autoscale()
plt.axis('equal')
plt.axis('off')

plt.show()
Run Code Online (Sandbox Code Playgroud)

python graph matplotlib draw networkx

5
推荐指数
1
解决办法
3416
查看次数

如何在 Networkx 和 matplotlib 中标记多重图的边缘?

我有一个无向多重图,我想用标签绘制边缘,有什么建议吗?我遵循建议,但仍然没有边缘标签。 通过atomh33ls使用networkx在两个节点之间绘制多条边

G=nx.MultiGraph ()
G.add_edge(1,2,weight=7)
G.add_edge(1,2,weight=2)
G.add_edge(1,2,weight=3)
G.add_edge(3,1,weight=2)
G.add_edge(3,2,weight=3)

node_label = nx.get_node_attributes(G,'id')
pos = nx.spring_layout(G)
nx.draw_networkx_nodes(G, pos, label=node_label)
nx.draw_networkx_labels(G, pos, label=node_label)
edge_labels=nx.get_edge_attributes(G,'weight')
ax = plt.gca()
for e in G.edges:
    ax.annotate("",
                xy=pos[e[0]], xycoords='data',
                xytext=pos[e[1]], textcoords='data',
                arrowprops=dict(arrowstyle="-", color="0.5",
                                shrinkA=5, shrinkB=5,
                                patchA=None, patchB=None,
                                connectionstyle="arc3,rad=rrr".replace('rrr',str(0.3*e[2])
                                ),
                                ),
                )
#nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)
plt.axis('off')
plt.show()
Run Code Online (Sandbox Code Playgroud)

无向多重图示例

python label graph networkx

5
推荐指数
1
解决办法
5114
查看次数

标签 统计

networkx ×4

python ×3

graph ×2

matplotlib ×2

python-2.7 ×2

draw ×1

graphviz ×1

label ×1